From 6ce2c47cb45a25a0c63369a5faa73e9c6fda929f Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 11 Apr 2026 19:52:39 +0200 Subject: [PATCH 01/12] Refactor: implemented robust structured JSON parser for Moodle questions and DOM scope detection --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- question_types/assay_plain_text.html | 66 ++ question_types/essay_html.html | 753 ++++++++++++++++++ question_types/multiple_choice.html | 121 +++ question_types/numerical.html | 63 ++ question_types/question_types.txt | 52 ++ question_types/short_text.html | 64 ++ question_types/single_choice.html | 120 +++ question_types/true_false.html | 73 ++ .../core/get-content-with-history.ts | 84 +- src/background/core/get-response.ts | 60 +- src/background/core/parse-question.ts | 99 +++ src/background/core/questions/atto.ts | 11 +- src/background/core/questions/checkbox.ts | 56 +- .../core/questions/contenteditable.ts | 11 +- src/background/core/questions/number.ts | 6 +- src/background/core/questions/radio.ts | 71 +- src/background/core/questions/select.ts | 7 +- src/background/core/questions/textbox.ts | 11 +- src/background/core/utils/question-schemas.ts | 98 +++ src/background/types/gpt-answer.ts | 8 +- src/background/types/question-types.ts | 96 +++ tsconfig.json | 3 +- 24 files changed, 1841 insertions(+), 96 deletions(-) create mode 100644 question_types/assay_plain_text.html create mode 100644 question_types/essay_html.html create mode 100644 question_types/multiple_choice.html create mode 100644 question_types/numerical.html create mode 100644 question_types/question_types.txt create mode 100644 question_types/short_text.html create mode 100644 question_types/single_choice.html create mode 100644 question_types/true_false.html create mode 100644 src/background/core/parse-question.ts create mode 100644 src/background/core/utils/question-schemas.ts create mode 100644 src/background/types/question-types.ts diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index b3080ad..e66de9a 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}function o(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}const i={role:"system",content:"\nAct as a quiz solver for the best notation with the following rules:\n- If no answer(s) are given, answer the statement as usual without following the other rules, providing the most detailed, complete and precise explanation. \n- But for the calculation provide this format 'result: '\n- For 'put in order' questions, maintain the answer in the order as presented in the question but assocy the correct order to it by usin this format ':\n:', ignore other rules.\n- Always reply in the format: '\n\n...'.\n- Retain only the correct answer(s).\n- Maintain the same order for the answers as in the text.\n- Retain all text from the answer with its description, content or definition.\n- Only provide answers that exactly match the given answer in the text.\n- The question always has the correct answer(s), so you should always provide an answer.\n- Always respond in the same language as the user's question.\n".trim()};function a(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function l(e,s,n){return t(this,void 0,void 0,(function*(){const t={role:"user",content:yield a(e,s,n)};if(!e.history)return{messages:[i,t]};let r;const o=function(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}(),l=function(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}();return r=null!==o&&function(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}(o,l)?o:l,{messages:[i,...r.history,t],saveResponse(s){e.history&&(r.history.push(t),r.history.push({role:"assistant",content:s}),sessionStorage.moodleGPTHistory=JSON.stringify(r))}}}))}function c(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function u(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let h=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return h=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function d(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const f=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class p extends Error{}class m extends p{constructor(e,t,s,n){super(`${m.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new y({message:s,cause:f(t)});const r=t?.error;return 400===e?new _(e,r,s,n):401===e?new b(e,r,s,n):403===e?new v(e,r,s,n):404===e?new x(e,r,s,n):409===e?new S(e,r,s,n):422===e?new A(e,r,s,n):429===e?new $(e,r,s,n):e>=500?new k(e,r,s,n):new m(e,r,s,n)}}class g extends m{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class y extends m{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class w extends y{constructor({message:e}={}){super({message:e??"Request timed out."})}}class _ extends m{}class b extends m{}class v extends m{}class x extends m{}class S extends m{}class A extends m{}class $ extends m{}class k extends m{}class R extends p{constructor(){super("Could not parse response content as the length limit was reached")}}class O extends p{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class I extends Error{constructor(e){super(e)}}const E=/^[a-z][a-z0-9+.-]*:/i;let C=e=>(C=Array.isArray,C(e)),T=C;function P(e){return"object"!=typeof e?{}:e??{}}function q(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const L=e=>new Promise((t=>setTimeout(t,e))),j="5.23.2";const M=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":j,"X-Stainless-OS":D(Deno.build.os),"X-Stainless-Arch":N(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":j,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":j,"X-Stainless-OS":D(globalThis.process.platform??"unknown"),"X-Stainless-Arch":N(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":j,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":j,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const N=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",D=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let B;function W(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function U(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return W({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function F(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const H=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),X="RFC3986",J=e=>String(e),K={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:J};let z=(e,t)=>(z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),z(e,t));const V=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),G=1024;function Q(e,t){if(C(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},Z=function(e,t){Array.prototype.push.apply(e,C(t)?t:[t])};let ee;const te={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=G?o.slice(e,e+G):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=V[n]:n<2048?s[s.length]=V[192|n>>6]+V[128|63&n]:n<55296||n>=57344?s[s.length]=V[224|n>>12]+V[128|n>>6&63]+V[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=V[240|n>>18]+V[128|n>>12&63]+V[128|n>>6&63]+V[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:X,formatter:J,indices:!1,serializeDate:e=>(ee??(ee=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const se={};function ne(e,t,s,n,r,o,i,a,l,c,u,h,d,f,p,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(se))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(se)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&C(w)&&(w=Q(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,te.encoder,g,"key",f):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(l){const e=m?t:l(t,te.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,te.encoder,g,"value",f))]}return[p?.(t)+"="+p?.(String(w))]}var x;const S=[];if(void 0===w)return S;let A;if("comma"===s&&C(w))m&&l&&(w=Q(w,l)),A=[{value:w.length>0?w.join(",")||null:void 0}];else if(C(c))A=c;else{const e=Object.keys(w);A=u?e.sort(u):e}const $=a?String(t).replace(/\./g,"%2E"):String(t),k=n&&C(w)&&1===w.length?$+"[]":$;if(r&&C(w)&&0===w.length)return k+"[]";for(let t=0;t0?h+u:""}let oe,ie;function ae(e){let t;return(oe??(t=new globalThis.TextEncoder,oe=t.encode.bind(t)))(e)}function le(e){let t;return(ie??(t=new globalThis.TextDecoder,ie=t.decode.bind(t)))(e)}var ce,ue;class he{constructor(){ce.set(this,void 0),ue.set(this,void 0),c(this,ce,new Uint8Array),c(this,ue,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?ae(e):e;c(this,ce,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([u(this,ce,"f"),t]));const s=[];let n;for(;null!=(n=de(u(this,ce,"f"),u(this,ue,"f")));){if(n.carriage&&null==u(this,ue,"f")){c(this,ue,n.index);continue}if(null!=u(this,ue,"f")&&(n.index!==u(this,ue,"f")+1||n.carriage)){s.push(le(u(this,ce,"f").subarray(0,u(this,ue,"f")-1))),c(this,ce,u(this,ce,"f").subarray(u(this,ue,"f"))),c(this,ue,null);continue}const e=null!==u(this,ue,"f")?n.preceding-1:n.preceding,t=le(u(this,ce,"f").subarray(0,e));s.push(t),c(this,ce,u(this,ce,"f").subarray(n.index)),c(this,ue,null)}return s}flush(){return u(this,ce,"f").length?this.decode("\n"):[]}}function de(e,t){for(let s=t??0;s{var n,r;if(e)return n=pe,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void be(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(pe))}`)};function ge(){}function ye(e,t,s){return!t||pe[e]>pe[s]?ge:t[e].bind(t)}const we={error:ge,warn:ge,info:ge,debug:ge};let _e=new WeakMap;function be(e){const t=e.logger,s=e.logLevel??"off";if(!t)return we;const n=_e.get(t);if(n&&n[0]===s)return n[1];const r={error:ye("error",t,s),warn:ye("warn",t,s),info:ye("info",t,s),debug:ye("debug",t,s)};return _e.set(t,[s,r]),r}const ve=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var xe,Se,Ae;class $e{constructor(e,t,s){this.iterator=e,xe.set(this,void 0),this.controller=t,c(this,xe,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?be(s):console;return new $e((async function*(){if(n)throw new p("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new p("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new p("Attempted to iterate over a response with no body")}const s=new ke,n=new he,r=F(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?ae(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=fe(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new m(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new m(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(d(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new $e((async function*(){if(n)throw new p("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new he,s=F(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(d(e))return;throw e}finally{s||t.abort()}}),t,s)}[(xe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new $e((()=>n(e)),this.controller,u(this,xe,"f")),new $e((()=>n(t)),this.controller,u(this,xe,"f"))]}toReadableStream(){const e=this;let t;return W({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=ae(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Re(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return be(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):$e.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Oe(await s.json(),s)}return await s.text()})();return be(e).debug(`[${n}] response parsed`,ve({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Oe(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Ie extends Promise{constructor(e,t,s=Re){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Se.set(this,void 0),c(this,Se,e)}_thenUnwrap(e){return new Ie(u(this,Se,"f"),this.responsePromise,(async(t,s)=>Oe(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(u(this,Se,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Se=new WeakMap;class Ee{constructor(e,t,s,n){Ae.set(this,void 0),c(this,Ae,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new p("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await u(this,Ae,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ae=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ce extends Ie{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Re(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Te extends Ee{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Pe extends Ee{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...P(this.options.query),after:t}}:null}}class qe extends Ee{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...P(this.options.query),after:e}}:null}}const Le=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function je(e,t,s){return Le(),new File(e,t??"unknown_file",s)}function Me(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Ne=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],De=async(e,t)=>({...e,body:await We(e.body,t)}),Be=new WeakMap;const We=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Be.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Be.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ue(s,e,t)))),s},Ue=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,je([await s.blob()],Me(s)));else if(Ne(s))e.append(t,je([await new Response(U(s)).blob()],Me(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Me(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ue(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ue(e,`${t}[${s}]`,n))))}}},Fe=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function He(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Fe(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Ne(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await He(s))}return t}class Xe{constructor(e){this._client=e}}function Je(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ke=Object.freeze(Object.create(null)),ze=(e=Je)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let l=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ke)??Ke)?.toString)&&(l=a+"",r.push({start:t.length+o.length,length:l.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":l)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let l;for(;null!==(l=a.exec(i));)r.push({start:l.index,length:l[0].length,error:`Value "${l[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new p(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Ve=ze(Je);let Ge=class extends Xe{list(e,t={},s){return this._client.getAPIList(Ve`/chat/completions/${e}/messages`,Pe,{query:t,...s})}};function Qe(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Ye(e){return"auto-parseable-response-format"===e?.$brand}function Ze(e){return"auto-parseable-tool"===e?.$brand}function et(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new R;if("content_filter"===e.finish_reason)throw new O;return rt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Qe(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ze(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?tt(t,e.message.content):null}}}));return{...e,choices:s}}function tt(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function st(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Qe(e)&&e.function?.name===t.function.name));return Qe(s)&&(Ze(s)||s?.function.strict||!1)}function nt(e){return!!Ye(e.response_format)||(e.tools?.some((e=>Ze(e)||"function"===e.type&&!0===e.function.strict))??!1)}function rt(e){for(const t of e||[])if("function"!==t.type)throw new p(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ot=e=>"assistant"===e?.role,it=e=>"tool"===e?.role;var at,lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt,_t,bt,vt,xt,St,At,$t,kt,Rt;class Ot{constructor(){at.add(this),this.controller=new AbortController,lt.set(this,void 0),ct.set(this,(()=>{})),ut.set(this,(()=>{})),ht.set(this,void 0),dt.set(this,(()=>{})),ft.set(this,(()=>{})),pt.set(this,{}),mt.set(this,!1),gt.set(this,!1),yt.set(this,!1),wt.set(this,!1),c(this,lt,new Promise(((e,t)=>{c(this,ct,e),c(this,ut,t)}))),c(this,ht,new Promise(((e,t)=>{c(this,dt,e),c(this,ft,t)}))),u(this,lt,"f").catch((()=>{})),u(this,ht,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),u(this,at,"m",_t).bind(this))}),0)}_connected(){this.ended||(u(this,ct,"f").call(this),this._emit("connect"))}get ended(){return u(this,mt,"f")}get errored(){return u(this,gt,"f")}get aborted(){return u(this,yt,"f")}abort(){this.controller.abort()}on(e,t){return(u(this,pt,"f")[e]||(u(this,pt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=u(this,pt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(u(this,pt,"f")[e]||(u(this,pt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{c(this,wt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){c(this,wt,!0),await u(this,ht,"f")}_emit(e,...t){if(u(this,mt,"f"))return;"end"===e&&(c(this,mt,!0),u(this,dt,"f").call(this));const s=u(this,pt,"f")[e];if(s&&(u(this,pt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return u(this,wt,"f")||s?.length||Promise.reject(e),u(this,ut,"f").call(this,e),u(this,ft,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];u(this,wt,"f")||s?.length||Promise.reject(e),u(this,ut,"f").call(this,e),u(this,ft,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function It(e){return"function"==typeof e.parse}lt=new WeakMap,ct=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,ft=new WeakMap,pt=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,wt=new WeakMap,at=new WeakSet,_t=function(e){if(c(this,gt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new g),e instanceof g)return c(this,yt,!0),this._emit("abort",e);if(e instanceof p)return this._emit("error",e);if(e instanceof Error){const t=new p(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new p(String(e)))};const Et=10;class Ct extends Ot{constructor(){super(...arguments),bt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),it(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ot(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new p("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),u(this,bt,"m",vt).call(this)}async finalMessage(){return await this.done(),u(this,bt,"m",xt).call(this)}async finalFunctionToolCall(){return await this.done(),u(this,bt,"m",St).call(this)}async finalFunctionToolCallResult(){return await this.done(),u(this,bt,"m",At).call(this)}async totalUsage(){return await this.done(),u(this,bt,"m",$t).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=u(this,bt,"m",xt).call(this);t&&this._emit("finalMessage",t);const s=u(this,bt,"m",vt).call(this);s&&this._emit("finalContent",s);const n=u(this,bt,"m",St).call(this);n&&this._emit("finalFunctionToolCall",n);const r=u(this,bt,"m",At).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",u(this,bt,"m",$t).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),u(this,bt,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(et(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:l=Et}=s||{},c=t.tools.map((e=>{if(Ze(e)){if(!e.$callback)throw new p("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),h={};for(const e of c)"function"===e.type&&(h[e.function.name||e.function.function.name]=e.function);const d="tools"in t?c.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=It(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await o.function(i,this),c=u(this,bt,"m",Rt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:c}),a)return}}}}bt=new WeakSet,vt=function(){return u(this,bt,"m",xt).call(this).content??null},xt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ot(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new p("stream ended without producing a ChatCompletionMessage with role=assistant")},St=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ot(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},At=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(it(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},$t=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new p("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Rt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Tt extends Ct{static runTools(e,t,s){const n=new Tt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ot(e)&&e.content&&this._emit("content",e.content)}}const Pt=1,qt=2,Lt=4,jt=8,Mt=16,Nt=32,Dt=64,Bt=128,Wt=256,Ut=511;class Ft extends Error{}class Ht extends Error{}const Xt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Ft(`${e} at position ${n}`)},o=e=>{throw new Ht(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?l():"["===e[n]?c():"null"===e.substring(n,n+4)||Mt&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Nt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Nt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Bt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Wt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&jt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(jt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(jt&t)return o;r("Expected '}' at end of object")}return n++,o},c=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Lt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&qt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(qt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||qt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&qt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Ut){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Xt(e.trim(),t)}(e,Ut^qt);var Kt,zt,Vt,Gt,Qt,Yt,Zt,es,ts,ss,ns,rs;class os extends Ct{constructor(e){super(),Kt.add(this),zt.set(this,void 0),Vt.set(this,void 0),Gt.set(this,void 0),c(this,zt,e),c(this,Vt,[])}get currentChatCompletionSnapshot(){return u(this,Gt,"f")}static fromReadableStream(e){const t=new os(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new os(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),u(this,Kt,"m",Qt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)u(this,Kt,"m",Zt).call(this,e);if(r.controller.signal?.aborted)throw new g;return this._addChatCompletion(u(this,Kt,"m",ss).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),u(this,Kt,"m",Qt).call(this),this._connected();const n=$e.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(u(this,Kt,"m",ss).call(this)),u(this,Kt,"m",Zt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new g;return this._addChatCompletion(u(this,Kt,"m",ss).call(this))}[(zt=new WeakMap,Vt=new WeakMap,Gt=new WeakMap,Kt=new WeakSet,Qt=function(){this.ended||c(this,Gt,void 0)},Yt=function(e){let t=u(this,Vt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},u(this,Vt,"f")[e.index]=t,t)},Zt=function(e){if(this.ended)return;const t=u(this,Kt,"m",rs).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=u(this,Kt,"m",Yt).call(this,e);e.finish_reason&&(u(this,Kt,"m",ts).call(this,e),null!=n.current_tool_call_index&&u(this,Kt,"m",es).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(u(this,Kt,"m",ts).call(this,e),null!=n.current_tool_call_index&&u(this,Kt,"m",es).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},es=function(e,t){if(u(this,Kt,"m",Yt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=u(this,zt,"f")?.tools?.find((e=>Qe(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ze(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},ts=function(e){const t=u(this,Kt,"m",Yt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=u(this,Kt,"m",ns).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},ss=function(){if(this.ended)throw new p("stream has ended, this shouldn't happen");const e=u(this,Gt,"f");if(!e)throw new p("request ended without sending any chunks");return c(this,Gt,void 0),c(this,Vt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,l={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new p(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:l,...c}=t,u=t.role;if(!u)throw new p(`missing role for choice ${n}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new p(`missing function_call.arguments for choice ${n}`);if(!l)throw new p(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:l},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return l?{...o,index:n,finish_reason:s,logprobs:r,message:{...c,role:u,content:i,refusal:t.refusal??null,tool_calls:l.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:l,name:c,...u}=r||{};if(null==i)throw new p(`missing choices[${n}].tool_calls[${s}].id\n${is(e)}`);if(null==o)throw new p(`missing choices[${n}].tool_calls[${s}].type\n${is(e)}`);if(null==c)throw new p(`missing choices[${n}].tool_calls[${s}].function.name\n${is(e)}`);if(null==l)throw new p(`missing choices[${n}].tool_calls[${s}].function.arguments\n${is(e)}`);return{...a,id:i,type:o,function:{...u,name:c,arguments:l}}}))}}:{...o,message:{...c,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&nt(t)?et(e,t):{...e,choices:e.choices.map((e=>(rt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,u(this,zt,"f"))},ns=function(){const e=u(this,zt,"f")?.response_format;return Ye(e)?e:null},rs=function(e){var t,s,n,r;let o=u(this,Gt,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=c(this,Gt,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:l,logprobs:c=null,...h}of e.choices){let e=o.choices[l];if(e||(e=o.choices[l]={finish_reason:a,index:l,message:{},logprobs:c,...h}),c)if(e.logprobs){const{content:n,refusal:r,...o}=c;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},c);if(a&&(e.finish_reason=a,u(this,zt,"f")&&nt(u(this,zt,"f")))){if("length"===a)throw new R;if("content_filter"===a)throw new O}if(Object.assign(e,h),!i)continue;const{content:d,refusal:f,function_call:p,role:m,tool_calls:g,...y}=i;if(Object.assign(e.message,y),f&&(e.message.refusal=(e.message.refusal||"")+f),m&&(e.message.role=m),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&u(this,Kt,"m",ns).call(this)&&(e.message.parsed=Jt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,st(u(this,zt,"f"),a)&&(a.function.parsed_arguments=Jt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function is(e){return JSON.stringify(e)}class as extends os{static fromReadableStream(e){const t=new as(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new as(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ls=class extends Xe{constructor(){super(...arguments),this.messages=new Ge(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Ve`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Ve`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Pe,{query:e,...t})}delete(e,t){return this._client.delete(Ve`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new p(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new p(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>et(t,e)))}runTools(e,t){return e.stream?as.runTools(this._client,e,t):Tt.runTools(this._client,e,t)}stream(e,t){return os.createChatCompletion(this._client,e,t)}};ls.Messages=Ge;class cs extends Xe{constructor(){super(...arguments),this.completions=new ls(this._client)}}cs.Completions=ls;const us=Symbol("brand.privateNullableHeaders");function*hs(e){if(!e)return;if(us in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():T(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=T(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ds=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of hs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[us]:!0,values:t,nulls:s}};class fs extends Xe{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ds([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ps extends Xe{create(e,t){return this._client.post("/audio/transcriptions",De({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class ms extends Xe{create(e,t){return this._client.post("/audio/translations",De({body:e,...t,__metadata:{model:e.model}},this._client))}}class gs extends Xe{constructor(){super(...arguments),this.transcriptions=new ps(this._client),this.translations=new ms(this._client),this.speech=new fs(this._client)}}gs.Transcriptions=ps,gs.Translations=ms,gs.Speech=fs;class ys extends Xe{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Ve`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Pe,{query:e,...t})}cancel(e,t){return this._client.post(Ve`/batches/${e}/cancel`,t)}}class ws extends Xe{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ve`/assistants/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ve`/assistants/${e}`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Pe,{query:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ve`/assistants/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class _s extends Xe{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class bs extends Xe{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let vs=class extends Xe{constructor(){super(...arguments),this.sessions=new _s(this._client),this.transcriptionSessions=new bs(this._client)}};vs.Sessions=_s,vs.TranscriptionSessions=bs;class xs extends Xe{create(e,t,s){return this._client.post(Ve`/threads/${e}/messages`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ve`/threads/${n}/messages/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ve`/threads/${n}/messages/${e}`,{body:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ve`/threads/${e}/messages`,Pe,{query:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Ve`/threads/${n}/messages/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Ss extends Xe{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Ve`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Ve`/threads/${n}/runs/${e}/steps`,Pe,{query:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const As=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var $s,ks,Rs,Os,Is,Es,Cs,Ts,Ps,qs,Ls,js,Ms,Ns,Ds,Bs,Ws,Us,Fs,Hs,Xs,Js,Ks;class zs extends Ot{constructor(){super(...arguments),$s.add(this),Rs.set(this,[]),Os.set(this,{}),Is.set(this,{}),Es.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0),Ps.set(this,void 0),qs.set(this,void 0),Ls.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ns.set(this,void 0)}[(Rs=new WeakMap,Os=new WeakMap,Is=new WeakMap,Es=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,Ps=new WeakMap,qs=new WeakMap,Ls=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ns=new WeakMap,$s=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=$e.fromReadableStream(e,this.controller);for await(const e of n)u(this,$s,"m",Ds).call(this,e);if(n.controller.signal?.aborted)throw new g;return this._addRun(u(this,$s,"m",Bs).call(this))}toReadableStream(){return new $e(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)u(this,$s,"m",Ds).call(this,e);if(i.controller.signal?.aborted)throw new g;return this._addRun(u(this,$s,"m",Bs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return u(this,js,"f")}currentRun(){return u(this,Ms,"f")}currentMessageSnapshot(){return u(this,Es,"f")}currentRunStepSnapshot(){return u(this,Ns,"f")}async finalRunSteps(){return await this.done(),Object.values(u(this,Os,"f"))}async finalMessages(){return await this.done(),Object.values(u(this,Is,"f"))}async finalRun(){if(await this.done(),!u(this,Cs,"f"))throw Error("Final run was not received.");return u(this,Cs,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)u(this,$s,"m",Ds).call(this,e);if(o.controller.signal?.aborted)throw new g;return this._addRun(u(this,$s,"m",Bs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)u(this,$s,"m",Ds).call(this,e);if(i.controller.signal?.aborted)throw new g;return this._addRun(u(this,$s,"m",Bs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!q(t)||!q(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!q(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=zs,Ds=function(e){if(!this.ended)switch(c(this,js,e),u(this,$s,"m",Fs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":u(this,$s,"m",Ks).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":u(this,$s,"m",Us).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":u(this,$s,"m",Ws).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Bs=function(){if(this.ended)throw new p("stream has ended, this shouldn't happen");if(!u(this,Cs,"f"))throw Error("Final run has not been received");return u(this,Cs,"f")},Ws=function(e){const[t,s]=u(this,$s,"m",Xs).call(this,e,u(this,Es,"f"));c(this,Es,t),u(this,Is,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=u(this,Ts,"f")){if(u(this,Ps,"f"))switch(u(this,Ps,"f").type){case"text":this._emit("textDone",u(this,Ps,"f").text,u(this,Es,"f"));break;case"image_file":this._emit("imageFileDone",u(this,Ps,"f").image_file,u(this,Es,"f"))}c(this,Ts,s.index)}c(this,Ps,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==u(this,Ts,"f")){const t=e.data.content[u(this,Ts,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,u(this,Es,"f"));break;case"text":this._emit("textDone",t.text,u(this,Es,"f"))}}u(this,Es,"f")&&this._emit("messageDone",e.data),c(this,Es,void 0)}},Us=function(e){const t=u(this,$s,"m",Hs).call(this,e);switch(c(this,Ns,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==u(this,qs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(u(this,Ls,"f")&&this._emit("toolCallDone",u(this,Ls,"f")),c(this,qs,e.index),c(this,Ls,t.step_details.tool_calls[e.index]),u(this,Ls,"f")&&this._emit("toolCallCreated",u(this,Ls,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":c(this,Ns,void 0);"tool_calls"==e.data.step_details.type&&u(this,Ls,"f")&&(this._emit("toolCallDone",u(this,Ls,"f")),c(this,Ls,void 0)),this._emit("runStepDone",e.data,t)}},Fs=function(e){u(this,Rs,"f").push(e),this._emit("event",e)},Hs=function(e){switch(e.event){case"thread.run.step.created":return u(this,Os,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=u(this,Os,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);u(this,Os,"f")[e.data.id]=n}return u(this,Os,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":u(this,Os,"f")[e.data.id]=e.data}if(u(this,Os,"f")[e.data.id])return u(this,Os,"f")[e.data.id];throw new Error("No snapshot available")},Xs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=u(this,$s,"m",Js).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Js=function(e,t){return ks.accumulateDelta(t,e)},Ks=function(e){switch(c(this,Ms,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":c(this,Cs,e.data),u(this,Ls,"f")&&(this._emit("toolCallDone",u(this,Ls,"f")),c(this,Ls,void 0))}};let Vs=class extends Xe{constructor(){super(...arguments),this.steps=new Ss(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Ve`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Ve`/threads/${n}/runs/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ve`/threads/${n}/runs/${e}`,{body:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ve`/threads/${e}/runs`,Pe,{query:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Ve`/threads/${n}/runs/${e}/cancel`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ds([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await L(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Ve`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Vs.Steps=Ss;class Gs extends Xe{constructor(){super(...arguments),this.runs=new Vs(this._client),this.messages=new xs(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ve`/threads/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ve`/threads/${e}`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Ve`/threads/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Gs.Runs=Vs,Gs.Messages=xs;class Qs extends Xe{constructor(){super(...arguments),this.realtime=new vs(this._client),this.assistants=new ws(this._client),this.threads=new Gs(this._client)}}Qs.Realtime=vs,Qs.Assistants=ws,Qs.Threads=Gs;class Ys extends Xe{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Zs extends Xe{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ve`/containers/${n}/files/${e}/content`,{...s,headers:ds([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let en=class extends Xe{constructor(){super(...arguments),this.content=new Zs(this._client)}create(e,t,s){return this._client.post(Ve`/containers/${e}/files`,De({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Ve`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Ve`/containers/${e}/files`,Pe,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Ve`/containers/${n}/files/${e}`,{...s,headers:ds([{Accept:"*/*"},s?.headers])})}};en.Content=Zs;class tn extends Xe{constructor(){super(...arguments),this.files=new en(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Ve`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Pe,{query:e,...t})}delete(e,t){return this._client.delete(Ve`/containers/${e}`,{...t,headers:ds([{Accept:"*/*"},t?.headers])})}}tn.Files=en;class sn extends Xe{create(e,t,s){const{include:n,...r}=t;return this._client.post(Ve`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Ve`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Ve`/conversations/${e}/items`,qe,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Ve`/conversations/${n}/items/${e}`,s)}}class nn extends Xe{constructor(){super(...arguments),this.items=new sn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Ve`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Ve`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Ve`/conversations/${e}`,t)}}nn.Items=sn;class rn extends Xe{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&be(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(be(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new w({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class un extends Xe{}let hn=class extends Xe{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class dn extends Xe{constructor(){super(...arguments),this.graders=new hn(this._client)}}dn.Graders=hn;class fn extends Xe{create(e,t,s){return this._client.getAPIList(Ve`/fine_tuning/checkpoints/${e}/permissions`,Te,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Ve`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Ve`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let pn=class extends Xe{constructor(){super(...arguments),this.permissions=new fn(this._client)}};pn.Permissions=fn;class mn extends Xe{list(e,t={},s){return this._client.getAPIList(Ve`/fine_tuning/jobs/${e}/checkpoints`,Pe,{query:t,...s})}}class gn extends Xe{constructor(){super(...arguments),this.checkpoints=new mn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Ve`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Pe,{query:e,...t})}cancel(e,t){return this._client.post(Ve`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Ve`/fine_tuning/jobs/${e}/events`,Pe,{query:t,...s})}pause(e,t){return this._client.post(Ve`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Ve`/fine_tuning/jobs/${e}/resume`,t)}}gn.Checkpoints=mn;class yn extends Xe{constructor(){super(...arguments),this.methods=new un(this._client),this.jobs=new gn(this._client),this.checkpoints=new pn(this._client),this.alpha=new dn(this._client)}}yn.Methods=un,yn.Jobs=gn,yn.Checkpoints=pn,yn.Alpha=dn;class wn extends Xe{}class _n extends Xe{constructor(){super(...arguments),this.graderModels=new wn(this._client)}}_n.GraderModels=wn;class bn extends Xe{createVariation(e,t){return this._client.post("/images/variations",De({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",De({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class vn extends Xe{retrieve(e,t){return this._client.get(Ve`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Te,e)}delete(e,t){return this._client.delete(Ve`/models/${e}`,t)}}class xn extends Xe{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Sn extends Xe{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class An extends Xe{constructor(){super(...arguments),this.clientSecrets=new Sn(this._client)}}function $n(e,t){return t&&function(e){if(Ye(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:On(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Rn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||In(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Rn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function On(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function In(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var En,Cn,Tn,Pn,qn,Ln,jn,Mn;An.ClientSecrets=Sn;class Nn extends Ot{constructor(e){super(),En.add(this),Cn.set(this,void 0),Tn.set(this,void 0),Pn.set(this,void 0),c(this,Cn,e)}static createResponse(e,t,s){const n=new Nn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),u(this,En,"m",qn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)u(this,En,"m",Ln).call(this,e,o);if(r.controller.signal?.aborted)throw new g;return u(this,En,"m",jn).call(this)}[(Cn=new WeakMap,Tn=new WeakMap,Pn=new WeakMap,En=new WeakSet,qn=function(){this.ended||c(this,Tn,void 0)},Ln=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=u(this,En,"m",Mn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new p(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new p(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new p(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new p(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},jn=function(){if(this.ended)throw new p("stream has ended, this shouldn't happen");const e=u(this,Tn,"f");if(!e)throw new p("request ended without sending any events");c(this,Tn,void 0);const t=function(e,t){return $n(e,t)}(e,u(this,Cn,"f"));return c(this,Pn,t),t},Mn=function(e){let t=u(this,Tn,"f");if(!t){if("response.created"!==e.type)throw new p(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=c(this,Tn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new p(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new p(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new p(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new p(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new p(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new p(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new p(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new p(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":c(this,Tn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=u(this,Pn,"f");if(!e)throw new p("stream ended without producing a ChatCompletion");return e}}class Dn extends Xe{list(e,t={},s){return this._client.getAPIList(Ve`/responses/${e}/input_items`,Pe,{query:t,...s})}}class Bn extends Xe{constructor(){super(...arguments),this.inputItems=new Dn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&In(e),e)))}retrieve(e,t={},s){return this._client.get(Ve`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&In(e),e)))}delete(e,t){return this._client.delete(Ve`/responses/${e}`,{...t,headers:ds([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Nn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Ve`/responses/${e}/cancel`,t)}}Bn.InputItems=Dn;class Wn extends Xe{create(e,t,s){return this._client.post(Ve`/uploads/${e}/parts`,De({body:t,...s},this._client))}}class Un extends Xe{constructor(){super(...arguments),this.parts=new Wn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Ve`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Ve`/uploads/${e}/complete`,{body:t,...s})}}Un.Parts=Wn;class Fn extends Xe{create(e,t,s){return this._client.post(Ve`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ve`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Ve`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Ve`/vector_stores/${n}/file_batches/${e}/files`,Pe,{query:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ds([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await L(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),l=[...s];const c=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);l.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(c),await this.createAndPoll(e,{file_ids:l})}}class Hn extends Xe{create(e,t,s){return this._client.post(Ve`/vector_stores/${e}/files`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Ve`/vector_stores/${n}/files/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Ve`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Ve`/vector_stores/${e}/files`,Pe,{query:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Ve`/vector_stores/${n}/files/${e}`,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ds([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await L(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Ve`/vector_stores/${n}/files/${e}/content`,Te,{...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Xn extends Xe{constructor(){super(...arguments),this.files=new Hn(this._client),this.fileBatches=new Fn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Ve`/vector_stores/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Ve`/vector_stores/${e}`,{body:t,...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Pe,{query:e,...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Ve`/vector_stores/${e}`,{...t,headers:ds([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Ve`/vector_stores/${e}/search`,Te,{body:t,method:"post",...s,headers:ds([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Jn,Kn,zn,Vn,Gn,Qn,Yn;Xn.Files=Hn,Xn.FileBatches=Fn;class Zn extends Xe{constructor(){super(...arguments),Jn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");u(this,Jn,"m",Kn).call(this,s);const r=ds([t]).values,o=u(this,Jn,"m",zn).call(this,r,"webhook-signature"),i=u(this,Jn,"m",zn).call(this,r,"webhook-timestamp"),a=u(this,Jn,"m",zn).call(this,r,"webhook-id"),l=parseInt(i,10);if(isNaN(l))throw new I("Invalid webhook timestamp format");const c=Math.floor(Date.now()/1e3);if(c-l>n)throw new I("Webhook timestamp is too old");if(l>c+n)throw new I("Webhook timestamp is too new");const h=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),f=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(f)))return}catch{continue}throw new I("The given webhook signature does not match the expected signature")}}Jn=new WeakSet,Kn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class er{constructor({baseURL:e=As("OPENAI_BASE_URL"),apiKey:t=As("OPENAI_API_KEY"),organization:s=As("OPENAI_ORG_ID")??null,project:n=As("OPENAI_PROJECT_ID")??null,webhookSecret:r=As("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(Vn.add(this),Qn.set(this,void 0),this.completions=new Ys(this),this.chat=new cs(this),this.embeddings=new rn(this),this.files=new cn(this),this.images=new bn(this),this.audio=new gs(this),this.moderations=new xn(this),this.models=new vn(this),this.fineTuning=new yn(this),this.graders=new _n(this),this.vectorStores=new Xn(this),this.webhooks=new Zn(this),this.beta=new Qs(this),this.batches=new ys(this),this.uploads=new Un(this),this.responses=new Bn(this),this.realtime=new An(this),this.conversations=new nn(this),this.evals=new ln(this),this.containers=new tn(this),void 0===t)throw new p("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new p("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??Gn.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=me(i.logLevel,"ClientOptions.logLevel",this)??me(As("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),c(this,Qn,H),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ds([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return re(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${j}`}defaultIdempotencyKey(){return`stainless-node-retry-${h()}`}makeStatusError(e,t,s,n){return m.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof p)throw e;throw new p(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new p(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!u(this,Vn,"m",Yn).call(this)&&s||this.baseURL,r=(e=>E.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Ie(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const l="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),c=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(be(this).debug(`[${l}] sending request`,ve({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new g;const h=new AbortController,p=await this.fetchWithTimeout(i,o,a,h).catch(f),m=Date.now();if(p instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new g;const r=d(p)||/timed? ?out/i.test(String(p)+("cause"in p?String(p.cause):""));if(t)return be(this).info(`[${l}] connection ${r?"timed out":"failed"} - ${e}`),be(this).debug(`[${l}] connection ${r?"timed out":"failed"} (${e})`,ve({retryOfRequestLogID:s,url:i,durationMs:m-u,message:p.message})),this.retryRequest(n,t,s??l);if(be(this).info(`[${l}] connection ${r?"timed out":"failed"} - error; no more retries left`),be(this).debug(`[${l}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ve({retryOfRequestLogID:s,url:i,durationMs:m-u,message:p.message})),r)throw new w;throw new y({cause:p})}const _=`[${l}${c}${[...p.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${p.ok?"succeeded":"failed"} with status ${p.status} in ${m-u}ms`;if(!p.ok){const e=await this.shouldRetry(p);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(p.body),be(this).info(`${_} - ${e}`),be(this).debug(`[${l}] response error (${e})`,ve({retryOfRequestLogID:s,url:p.url,status:p.status,headers:p.headers,durationMs:m-u})),this.retryRequest(n,t,s??l,p.headers)}const r=e?"error; no more retries left":"error; not retryable";be(this).info(`${_} - ${r}`);const o=await p.text().catch((e=>f(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;be(this).debug(`[${l}] response error (${r})`,ve({retryOfRequestLogID:s,url:p.url,status:p.status,headers:p.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(p.status,i,a,p.headers)}return be(this).info(_),be(this).debug(`[${l}] response start`,ve({retryOfRequestLogID:s,url:p.url,status:p.status,headers:p.headers,durationMs:m-u})),{response:p,options:n,controller:h,requestLogID:l,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ce(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),l=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,c={signal:n.signal,...l?{duplex:"half"}:{},method:"GET",...i};o&&(c.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,c)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await L(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new p(`${e} must be an integer`);if(t<0)throw new p(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:l,body:c}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:l,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&c instanceof globalThis.ReadableStream&&{duplex:"half"},...c&&{body:c},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ds([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...B??(B=M()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ds([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:U(e)}:u(this,Qn,"f").call(this,{body:e,headers:s})}}function tr(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function sr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function nr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;if(e.typing){let e=0;const t=function(r){if(r.preventDefault(),"Backspace"===r.key||e>=s.response.length)return void n.removeEventListener("keydown",t);n.textContent=s.response.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=s.response;return!0}function rr(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=s.normalizedResponse.match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function or(e,t,s){const i=null==t?void 0:t[0];if(!i||"radio"!==i.type)return!1;const a=Array.from(t).map((e=>{var t,s;return{element:e,value:o(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),l=n(s.normalizedResponse,a);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const c=l.element;return e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click(),!0}function ir(e,t,s){const i=null==t?void 0:t[0];if(!i||"checkbox"!==i.type)return!1;const a=s.normalizedResponse.split("\n"),l=Array.from(t).map((e=>{var t,s;return{element:e,value:o(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),c=new Set;for(const t of a){const s=n(t,l);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}for(const t of l.map((e=>e.element))){const s=t.checked&&!c.has(t)||!t.checked&&c.has(t),n=()=>s&&t.click();e.mouseover?t.addEventListener("mouseover",n,{once:!0}):n()}return!0}function ar(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const i=s.normalizedResponse.split("\n");e.logs&&r.array(i);for(let s=0;s{var t;return{element:e,value:o(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),c=n(i[s],l);e.logs&&c.value&&r.bestAnswer(c.value,c.similarity);const u=c.element,h=u.closest("select");null!==h&&(e.mouseover?h.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function lr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;if(e.typing){let e=0;const t=function(r){r.preventDefault(),"Backspace"===r.key||e>=s.response.length?n.removeEventListener("keydown",t):n.value=s.response.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=s.response;return!0}function cr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;if(e.typing){let e=0;const t=function(n){if(n.preventDefault(),"Backspace"===n.key||e>=s.response.length)return void r.contentWindow.removeEventListener("keydown",t);const i=document.createTextNode(s.response.charAt(e++));o.appendChild(i);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const l=r.contentWindow.getSelection();l&&(l.removeAllRanges(),l.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=s.response;return!0}function ur(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const i=e.querySelectorAll(".qtext table");for(const e of i)t=t.replace(e.innerText,"\n"+tr(e)+"\n");return o(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),i=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield l(e,s,n),c=new er({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),u=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,{model:e.model,messages:a.messages,max_completion_tokens:e.maxTokens||2e3}),{signal:e.timeout?r.signal:null});clearTimeout(i);const h=null!==(t=u.choices[0].message.content)&&void 0!==t?t:"";return"function"==typeof a.saveResponse&&a.saveResponse(h),{question:n,response:h,normalizedResponse:o(h)}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),a="object"==typeof i&&"error"in i;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||a?"pointer":"initial"),a)console.error(i.error);else switch(e.config.logs&&(r.question(s),r.response(i)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),sr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:i,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:i,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[cr,nr,lr,rr,ar,or,ir];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;sr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:i,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}Gn=er,Qn=new WeakMap,Vn=new WeakSet,Yn=function(){return"https://api.openai.com/v1"!==this.baseURL},er.OpenAI=Gn,er.DEFAULT_TIMEOUT=6e5,er.OpenAIError=p,er.APIError=m,er.APIConnectionError=y,er.APIConnectionTimeoutError=w,er.APIUserAbortError=g,er.NotFoundError=x,er.ConflictError=S,er.RateLimitError=$,er.BadRequestError=_,er.AuthenticationError=b,er.InternalServerError=k,er.PermissionDeniedError=v,er.UnprocessableEntityError=A,er.InvalidWebhookSignatureError=I,er.toFile=async function(e,t,s){if(Le(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Fe(e))(e=await e))return e instanceof File?e:je([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),je(await He(n),t,s)}const n=await He(e);if(t||(t=Me(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return je(n,t,s)},er.Completions=Ys,er.Chat=cs,er.Embeddings=rn,er.Files=cn,er.Images=bn,er.Audio=gs,er.Moderations=xn,er.Models=vn,er.FineTuning=yn,er.Graders=_n,er.VectorStores=Xn,er.Webhooks=Zn,er.Beta=Qs,er.Batches=ys,er.Uploads=Un,er.Responses=Bn,er.Realtime=An,er.Conversations=nn,er.Evals=ln,er.Containers=tn;const hr=[],dr=[];function fr(e){const t=dr.findIndex((t=>t.element===e));if(-1!==t){const e=dr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function pr(t){if(dr.length>0){for(const e of dr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(dr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=ur.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>fr(n)});dr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){hr.push(t.key),hr.length>e.code.length&&hr.shift(),hr.join("")===e.code&&(hr.length=0,pr(e))}))}(t):pr(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function h(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function d(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}return s.classList.contains("truefalse")?{question_type:o.TRUE_FALSE,question_text:t}:s.classList.contains("shortanswer")?{question_type:o.SHORT_TEXT,question_text:t}:s.classList.contains("numerical")?{question_type:o.NUMERICAL,question_text:t}:s.classList.contains("essay")?{question_type:o.ESSAY,question_text:t}:null}(s,n),r=t?JSON.stringify(t,null,2):n,i={role:"user",content:yield l(e,s,r)},p=s=>{const n={history:s};return{messages:[c,...s,i],query:t,saveResponse(t){if(e.history){let e;n.history.push(i),n.history.push({role:"assistant",content:t});const s=h(),r=u();e=null!==s&&d(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return p([]);const f=h(),m=u();return null!==f&&d(f,m)?p(f.history):p(m.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new $(e,r,s,n):403===e?new E(e,r,s,n):404===e?new O(e,r,s,n):409===e?new R(e,r,s,n):422===e?new I(e,r,s,n):429===e?new k(e,r,s,n):e>=500?new q(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class $ extends b{}class E extends b{}class O extends b{}class R extends b{}class I extends b{}class k extends b{}class q extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(Deno.build.os),"X-Stainless-Arch":F(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(globalThis.process.platform??"unknown"),"X-Stainless-Arch":F(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const F=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",H=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function V(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const z=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),G="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:G,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=d?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?d?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const $=a?String(t).replace(/\./g,"%2E"):String(t),E=n&&N(_)&&1===_.length?$+"[]":$;if(r&&N(_)&&0===_.length)return E+"[]";for(let t=0;t0?h+u:""}let ue,he;function de(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(he??(t=new globalThis.TextDecoder,he=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?de(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void $e(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function $e(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Ee=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var Oe,Re,Ie;class ke{constructor(e,t,s){this.iterator=e,Oe.set(this,void 0),this.controller=t,f(this,Oe,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?$e(s):console;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new qe,n=new ge,r=V(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?de(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=V(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[(Oe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new ke((()=>n(e)),this.controller,m(this,Oe,"f")),new ke((()=>n(t)),this.controller,m(this,Oe,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=de(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class qe{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return $e(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):ke.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return $e(e).debug(`[${n}] response parsed`,Ee({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Re.set(this,void 0),f(this,Re,e)}_thenUnwrap(e){return new Le(m(this,Re,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Re,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Re=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Fe=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],He=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(Fe(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ve=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function ze(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ve(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Fe(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await ze(s))}return t}class Ge{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends Ge{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,ht=e=>"tool"===e?.role;var dt,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,$t,Et,Ot,Rt,It,kt,qt,Ct;class Tt{constructor(){dt.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,dt,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,dt=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),$t.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),ht(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,$t,"m",Et).call(this)}async finalMessage(){return await this.done(),m(this,$t,"m",Ot).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,$t,"m",Rt).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,$t,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,$t,"m",kt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,$t,"m",Ot).call(this);t&&this._emit("finalMessage",t);const s=m(this,$t,"m",Et).call(this);s&&this._emit("finalContent",s);const n=m(this,$t,"m",Rt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,$t,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,$t,"m",kt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,$t,"m",qt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const h="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,$t,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}$t=new WeakSet,Et=function(){return m(this,$t,"m",Ot).call(this).content??null},Ot=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Rt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ht(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},kt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},qt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ft=32,Ht=64,Xt=128,Jt=256,Kt=511;class Vt extends Error{}class zt extends Error{}const Gt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Vt(`${e} at position ${n}`)},o=e=>{throw new zt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ft&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ft&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Bt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Gt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=ke.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${hs(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${hs(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${hs(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${hs(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:h,refusal:d,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),d&&(e.message.refusal=(e.message.refusal||"")+d),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function hs(e){return JSON.stringify(e)}class ds extends us{static fromReadableStream(e){const t=new ds(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ds(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends Ge{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?ds.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends Ge{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends Ge{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends Ge{create(e,t){return this._client.post("/audio/transcriptions",He({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends Ge{create(e,t){return this._client.post("/audio/translations",He({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends Ge{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends Ge{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends Ge{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends Ge{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class $s extends Ge{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Es=class extends Ge{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new $s(this._client)}};Es.Sessions=As,Es.TranscriptionSessions=$s;class Os extends Ge{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Rs extends Ge{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var ks,qs,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Fs,Hs,Xs,Js,Ks,Vs,zs,Gs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),ks.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,ks=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new qs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=ke.fromReadableStream(e,this.controller);for await(const e of n)m(this,ks,"m",Hs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new qs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Fs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,ks,"m",Hs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}qs=Zs,Hs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,ks,"m",Vs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,ks,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,ks,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,ks,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,ks,"m",Gs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,ks,"m",zs).call(this,e);switch(f(this,Fs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Fs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Vs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},zs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=qs.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},Gs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,ks,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return qs.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends Ge{constructor(){super(...arguments),this.steps=new Rs(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Rs;class tn extends Ge{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new Os(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=Os;class sn extends Ge{constructor(){super(...arguments),this.realtime=new Es(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Es,sn.Assistants=Ss,sn.Threads=tn;class nn extends Ge{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends Ge{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends Ge{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,He({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends Ge{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends Ge{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends Ge{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends Ge{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&$e(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:($e(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends Ge{}let gn=class extends Ge{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends Ge{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends Ge{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends Ge{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends Ge{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends Ge{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends Ge{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends Ge{}class An extends Ge{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class $n extends Ge{createVariation(e,t){return this._client.post("/images/variations",He({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",He({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class En extends Ge{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class On extends Ge{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Rn extends Ge{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends Ge{constructor(){super(...arguments),this.clientSecrets=new Rn(this._client)}}function kn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?qn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function qn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=Rn;class Fn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Fn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return kn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Hn extends Ge{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends Ge{constructor(){super(...arguments),this.inputItems=new Hn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>qn(t,e)))}stream(e,t){return Fn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Hn;class Jn extends Ge{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,He({body:t,...s},this._client))}}class Kn extends Ge{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Vn extends Ge{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class zn extends Ge{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Gn extends Ge{constructor(){super(...arguments),this.files=new zn(this._client),this.fileBatches=new Vn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;Gn.Files=zn,Gn.FileBatches=Vn;class rr extends Ge{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),h=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),d=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",h,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(d)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new $n(this),this.audio=new vs(this),this.moderations=new On(this),this.models=new En(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new Gn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,z),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if($e(this).debug(`[${c}] sending request`,Ee({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const h=new AbortController,d=await this.fetchWithTimeout(i,o,a,h).catch(_),p=Date.now();if(d instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(d)||/timed? ?out/i.test(String(d)+("cause"in d?String(d.cause):""));if(t)return $e(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),$e(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Ee({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),this.retryRequest(n,t,s??c);if($e(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),$e(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Ee({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),r)throw new S;throw new x({cause:d})}const f=`[${c}${l}${[...d.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${d.ok?"succeeded":"failed"} with status ${d.status} in ${p-u}ms`;if(!d.ok){const e=await this.shouldRetry(d);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(d.body),$e(this).info(`${f} - ${e}`),$e(this).debug(`[${c}] response error (${e})`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,d.headers)}const r=e?"error; no more retries left":"error; not retryable";$e(this).info(`${f} - ${r}`);const o=await d.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;$e(this).debug(`[${c}] response error (${r})`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(d.status,i,a,d.headers)}return $e(this).info(f),$e(this).debug(`[${c}] response start`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),{response:d,options:n,controller:h,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=O,or.ConflictError=R,or.RateLimitError=k,or.BadRequestError=A,or.AuthenticationError=$,or.InternalServerError=q,or.PermissionDeniedError=E,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ve(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await ze(n),t,s)}const n=await ze(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=$n,or.Audio=vs,or.Moderations=On,or.Models=En,or.FineTuning=xn,or.Graders=An,or.VectorStores=Gn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,h=u.closest("select");null!==h&&(e.mouseover?h.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,h={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(h.response_format={type:"json_object"},h.messages.length>0&&"system"===h.messages[0].role&&(h.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const d=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,h),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=d.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,pr,hr,dr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const yr=[],_r=[];function wr(e){const t=_r.findIndex((t=>t.element===e));if(-1!==t){const e=_r.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function br(t){if(_r.length>0){for(const e of _r)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(_r.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=gr.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>wr(n)});_r.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){yr.push(t.key),yr.length>e.code.length&&yr.shift(),yr.join("")===e.code&&(yr.length=0,br(e))}))}(t):br(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index ac2c98a..731d8f6 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/utils/normalize-text.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","normalizeText","toLowerCase","trim","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","questionElement","imagesElements","querySelectorAll","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","getContentWithHistory","message","history","messages","pastHistory","JSON","parse","_a","sessionStorage","moodleGPTHistory","loadPastHistory","newHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","_b","createNewHistory","a","b","KEYS_TO_COMPARE","key","areHistoryFromSameQuiz","saveResponse","stringify","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","textContent","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","getAttribute","isContentEditable","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","possibleAnswers","inp","parentElement","correctInput","mouseover","click","handleCheckbox","corrects","correctElements","correct","needAction","checked","action","handleSelect","tagName","opt","correctOption","currentSelect","closest","selected","handleTextbox","handleAtto","classList","contains","iframe","querySelector","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","temperature","top_p","fixeO","max_completion_tokens","maxTokens","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","getAttribute","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","opt","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/question_types/assay_plain_text.html b/question_types/assay_plain_text.html new file mode 100644 index 0000000..3c6cb3a --- /dev/null +++ b/question_types/assay_plain_text.html @@ -0,0 +1,66 @@ +
+
+

Question 7

+
Not yet answered
+
Marked out of 1.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+
+

What is resilience?

+
+
+
+
+ +
+
+
+
+
+
diff --git a/question_types/essay_html.html b/question_types/essay_html.html new file mode 100644 index 0000000..29b4ee6 --- /dev/null +++ b/question_types/essay_html.html @@ -0,0 +1,753 @@ +
+
+

Question 6

+
Not yet answered
+
Marked out of 1.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+
+

What is resilience?

+
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
+
+
+
diff --git a/question_types/multiple_choice.html b/question_types/multiple_choice.html new file mode 100644 index 0000000..4a9e85a --- /dev/null +++ b/question_types/multiple_choice.html @@ -0,0 +1,121 @@ +
+
+

Question 2

+
Not yet answered
+
Marked out of 1.00
+ + + v2 (latest) +
+
+
+

Question text

+ +
+
+

Which of the following actions can help you develop resilience?

+
+
+
+ + Question 2 Select one or more: + +
+
+ +
+
+

 Ignoring emotions and pushing through hardships without reflection.

+
+
+
+
+ +
+
+

+ Practising self-care, such as maintaining a healthy sleep routine and regular + exercise +

+
+
+
+
+ +
+
+

+  Seeking support from friends, mentors, or professional resources when facing + difficulties.  +

+
+
+
+
+ +
+
+

Avoiding challenges and stressful situations to prevent failure

+
+
+
+
+
+
+
+
diff --git a/question_types/numerical.html b/question_types/numerical.html new file mode 100644 index 0000000..8c9427e --- /dev/null +++ b/question_types/numerical.html @@ -0,0 +1,63 @@ +
+
+

Question 5

+
Not yet answered
+
Marked out of 1.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+
+

What is 2 + 2?

+
+
+
+ +
+
+
+
diff --git a/question_types/question_types.txt b/question_types/question_types.txt new file mode 100644 index 0000000..7cf67f4 --- /dev/null +++ b/question_types/question_types.txt @@ -0,0 +1,52 @@ +From moodle docs: https://docs.moodle.org/501/en/Question_types + +Standard question types +Calculated +Calculated questions offer a way to create individual numerical questions by the use of wildcards that are substituted with individual values when the quiz is taken. More on the Calculated question type + +Calculated multi-choice +Calculated multichoice questions are like multichoice questions with the additional property that the elements to select can include formula results from numeric values that are selected randomly from a set when the quiz is taken. They use the same wildcards than Calculated questions and their wildcards can be shared with other Calculated multichoice or regular Calculated questions. + +The main difference is that the formula is included in the answer choice as {=...} i.e. if you calculate the surface of a rectangle {={l}*{w}}. + +More on the Calculated Multi-Choice question type. + +Calculated simple +Simple calculated questions offer a way to create individual numerical questions whose response is the result of a numerical formula which contain variable numerical values by the use of wildcards (i.e. {x} , {y}) that are substituted with random values when the quiz is taken. + +The simple calculated questions offers the most used features of the calculated question with a much simpler creation interface. More on the Simple Calculated question type. + +Drag and drop into text +Students select missing words or phrases and add them to text by dragging boxes to the correct location. Items may be grouped and used more than once. More on the Drag and drop into text question type. + +Essay +This allows students to write at length on a particular subject and must be manually graded. + +It is possible for a teacher to create a template to scaffold the student's answer in order to give them extra support. The template is then reproduced in the text editor when the student starts to answer the question. See YouTube video Essay scaffold with the Moodle quiz It is also possible to include grading information for teachers marking the essay to refer to as they assess the essays, + +Matching +A list of sub-questions is provided, along with a list of answers. The respondent must "match" the correct answers with each question. More on the Matching question type + +Embedded Answers (Cloze Test / Gap Fill) +These very flexible questions consist of a passage of text (in Moodle format) that has various answers embedded within it, including multiple choice, short answers and numerical answers. More on the Embedded Answers question type + +Multiple choice +With the Multiple Choice question type you can create single-answer and multiple-answer questions, include pictures, sound or other media in the question and/or answer options (by inserting HTML) and weight individual answers. + +Ordering +The ordering question type displays several items (words, phrases or images) in a random order which are to be dragged into the correct sequential order. See Ordering question type for more information. + +Short Answer +In response to a question (that may include an image), the respondent types a word or phrase. There may several possible correct answers, with different grades. Answers may or may not be sensitive to case. More on the Short Answer question type + +Numerical +From the student perspective, a numerical question looks just like a short-answer question. The difference is that numerical answers are allowed to have an accepted error. This allows a continuous range of answers to be set. More on the Numerical question type + +Random short-answer matching +From the student perspective, this looks just like a Matching question. The difference is that the sub-questions are drawn randomly from Short Answer questions in the current category. More on the Random Short-Answer Matching question type + +Select missing words +Students select a missing word or phrase from a dropdown menu. Items may be grouped and used more than once. More on the Select missing words question type + +True/False +In response to a question (that may include an image), the respondent selects from two options: True or False. More on the True/False question type \ No newline at end of file diff --git a/question_types/short_text.html b/question_types/short_text.html new file mode 100644 index 0000000..5c35a8b --- /dev/null +++ b/question_types/short_text.html @@ -0,0 +1,64 @@ +
+
+

Question 4

+
Not yet answered
+
Marked out of 1.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+
+

How is a post on Twitter called?

+
+
+
+ +
+
+
+
diff --git a/question_types/single_choice.html b/question_types/single_choice.html new file mode 100644 index 0000000..b4f8eb3 --- /dev/null +++ b/question_types/single_choice.html @@ -0,0 +1,120 @@ +
+
+

Question 1

+
Not yet answered
+
Marked out of 1.00
+ + + v2 (latest) +
+
+
+

Question text

+ +
+
+

What is resilience?

+
+
+
+ + Question 1 Answer + +
+
+ +
+
+

The ability to recover from difficulties and adapt to challenging situations

+
+
+
+
+ +
+
+

The skill of controlling other people’s emotions during a crisis

+
+
+
+
+ +
+
+

The ability to avoid stressful situations entirely.

+
+
+
+
+ +
+
+
+
diff --git a/question_types/true_false.html b/question_types/true_false.html new file mode 100644 index 0000000..d61c5d6 --- /dev/null +++ b/question_types/true_false.html @@ -0,0 +1,73 @@ +
+
+

Question 3

+
Not yet answered
+
Marked out of 1.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+
+

Is resilience important?

+
+
+
+ + Question 3 Answer + +
+
+ +
+
+ +
+
+
+
+
+
diff --git a/src/background/core/get-content-with-history.ts b/src/background/core/get-content-with-history.ts index 8f561e6..45e8369 100644 --- a/src/background/core/get-content-with-history.ts +++ b/src/background/core/get-content-with-history.ts @@ -2,6 +2,8 @@ import type Config from '../types/config'; import imageToBase64 from 'background/utils/image-to-base64'; import isGPTModelGreaterOrEqualTo4 from 'background/utils/version-support-images'; import { ChatCompletionMessageParam, ChatCompletionUserMessageParam } from 'openai/resources'; +import { parseMoodleQuestion } from './parse-question'; +import { MoodleQuestionQuery /* MoodleQuestionType */ } from '../types/question-types'; // The attempt and the cmid allow us to identify a quiz type History = { @@ -11,18 +13,13 @@ type History = { history: ChatCompletionMessageParam[]; }; -const INSTRUCTION: string = ` -Act as a quiz solver for the best notation with the following rules: -- If no answer(s) are given, answer the statement as usual without following the other rules, providing the most detailed, complete and precise explanation. -- But for the calculation provide this format 'result: ' -- For 'put in order' questions, maintain the answer in the order as presented in the question but assocy the correct order to it by usin this format ':\n:', ignore other rules. -- Always reply in the format: '\n\n...'. -- Retain only the correct answer(s). -- Maintain the same order for the answers as in the text. -- Retain all text from the answer with its description, content or definition. -- Only provide answers that exactly match the given answer in the text. -- The question always has the correct answer(s), so you should always provide an answer. -- Always respond in the same language as the user's question. +const INSTRUCTION = ` +You are an expert quiz solver. +Please solve the provided question based on its type and provide the correct result. +- For choice questions, output the exact index(es) of the correct answer(s). +- For text/numerical questions, provide the exact wording or number. +- For essay questions, provide a highly detailed and complete response. +Always output strict JSON according to the requested schema block. `.trim(); const SYSTEM_INSTRUCTION_MESSAGE = { @@ -37,7 +34,8 @@ const SYSTEM_INSTRUCTION_MESSAGE = { async function getContent( config: Config, questionElement: HTMLElement, - question: string + // We provide the structured JSON if parsed, otherwise fallback to normalized text string + textContent: string ): Promise { const imagesElements = questionElement.querySelectorAll('img'); @@ -46,7 +44,7 @@ async function getContent( !isGPTModelGreaterOrEqualTo4(config.model) || imagesElements.length === 0 ) { - return question; + return textContent; } const contentWithImages: ChatCompletionUserMessageParam['content'] = []; @@ -67,7 +65,7 @@ async function getContent( contentWithImages.push({ type: 'text', - text: question + text: textContent }); return contentWithImages; @@ -126,34 +124,54 @@ async function getContentWithHistory( ): Promise<{ messages: [typeof SYSTEM_INSTRUCTION_MESSAGE, ...ChatCompletionMessageParam[]]; saveResponse?: (response: string) => void; + query: MoodleQuestionQuery | null; }> { - const content = await getContent(config, questionElement, question); + const parsedQuery = parseMoodleQuestion(questionElement, question); + const textContent = parsedQuery ? JSON.stringify(parsedQuery, null, 2) : question; + + const content = await getContent(config, questionElement, textContent); const message: ChatCompletionMessageParam = { role: 'user', content }; - if (!config.history) return { messages: [SYSTEM_INSTRUCTION_MESSAGE, message] }; + const buildResult = (historyMsg: ChatCompletionMessageParam[]) => { + const historyObj = { history: historyMsg }; + return { + messages: [SYSTEM_INSTRUCTION_MESSAGE, ...historyMsg, message] as [ + typeof SYSTEM_INSTRUCTION_MESSAGE, + ...ChatCompletionMessageParam[] + ], + query: parsedQuery, + saveResponse(response: string) { + if (config.history) { + historyObj.history.push(message); + historyObj.history.push({ role: 'assistant', content: response }); + // Note we probably need the full 'history' object here to stringify it: + // We will recreate it or reuse the loaded one + let historyToSave: History; + const pastHistory: History | null = loadPastHistory(); + const newHistory: History = createNewHistory(); + if (pastHistory === null || !areHistoryFromSameQuiz(pastHistory, newHistory)) { + historyToSave = newHistory; + } else { + historyToSave = pastHistory; + } + historyToSave.history = historyObj.history; + sessionStorage.moodleGPTHistory = JSON.stringify(historyToSave); + } + } + }; + }; - let history: History; + if (!config.history) { + return buildResult([]); + } const pastHistory: History | null = loadPastHistory(); const newHistory: History = createNewHistory(); - if (pastHistory === null || !areHistoryFromSameQuiz(pastHistory, newHistory)) { - history = newHistory; + return buildResult(newHistory.history); } else { - history = pastHistory; + return buildResult(pastHistory.history); } - - return { - messages: [SYSTEM_INSTRUCTION_MESSAGE, ...history.history, message], - saveResponse(response: string) { - // Register the conversation - if (config.history) { - history.history.push(message); - history.history.push({ role: 'assistant', content: response }); - sessionStorage.moodleGPTHistory = JSON.stringify(history); - } - } - }; } export default getContentWithHistory; diff --git a/src/background/core/get-response.ts b/src/background/core/get-response.ts index 92587e8..78884d3 100644 --- a/src/background/core/get-response.ts +++ b/src/background/core/get-response.ts @@ -1,9 +1,10 @@ import type Config from '../types/config'; import type GPTAnswer from '../types/gpt-answer'; -import normalizeText from 'background/utils/normalize-text'; import getContentWithHistory from './get-content-with-history'; import OpenAI from 'openai'; import { fixeO } from '../utils/fixe-o'; +import { QuestionSchemas } from './utils/question-schemas'; +import { MoodleQuestionType, MoodleQuestionResponse } from '../types/question-types'; /** * Get the response from chatGPT api @@ -29,27 +30,58 @@ async function getChatGPTResponse( dangerouslyAllowBrowser: true }); - const req = await client.chat.completions.create( - fixeO(config.model, { - model: config.model, - messages: contentHandler.messages, + const questionType = contentHandler.query + ? contentHandler.query.question_type + : MoodleQuestionType.UNKNOWN; + const targetSchema: MoodleQuestionResponse = + questionType !== MoodleQuestionType.UNKNOWN ? QuestionSchemas[questionType] : undefined; - max_completion_tokens: config.maxTokens || 2000 // Maximum length of the response, - }), - { signal: config.timeout ? controller.signal : null } - ); + const requestPayload: any = { + model: config.model, + messages: contentHandler.messages.map(msg => ({ ...msg })), + max_completion_tokens: config.maxTokens || 2000 // Maximum length of the response, + }; + + if (targetSchema) { + requestPayload.response_format = { + type: 'json_object' + }; + + if (requestPayload.messages.length > 0 && requestPayload.messages[0].role === 'system') { + requestPayload.messages[0].content += `\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(targetSchema, null, 2)}`; + } + } + + const req = await client.chat.completions.create(fixeO(config.model, requestPayload), { + signal: config.timeout ? controller.signal : null + }); clearTimeout(timeoutControler); - const response = req.choices[0].message.content ?? ''; + const rawResponse = req.choices[0].message.content ?? ''; + let structuredResponse: MoodleQuestionResponse | null = null; + + if (targetSchema) { + try { + const cleanedResponse = rawResponse + .replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g, '$2') + .replace(/^```(json)?|```$/gm, '') + .trim(); + structuredResponse = JSON.parse(cleanedResponse); + } catch (e) { + console.error('Failed to parse structured JSON from GPT', e); + } + } // Save the response into the history - if (typeof contentHandler.saveResponse === 'function') contentHandler.saveResponse(response); + if (typeof contentHandler.saveResponse === 'function') { + contentHandler.saveResponse(rawResponse); + } return { - question, - response, - normalizedResponse: normalizeText(response) + questionQuery: contentHandler.query, + response: structuredResponse, + rawResponse: rawResponse }; } diff --git a/src/background/core/parse-question.ts b/src/background/core/parse-question.ts new file mode 100644 index 0000000..ef0cee0 --- /dev/null +++ b/src/background/core/parse-question.ts @@ -0,0 +1,99 @@ +import { MoodleQuestionQuery, MoodleQuestionType, AnswerOption } from '../types/question-types'; +import normalizeText from 'background/utils/normalize-text'; + +/** + * Extracts options from a multichoice question. + */ +function extractOptions(questionElement: HTMLElement, inputSelector: string): AnswerOption[] { + const options: AnswerOption[] = []; + const inputs = questionElement.querySelectorAll(inputSelector); + + inputs.forEach((input, index) => { + // some inputs have value "-1", which is standard moodle for "clear choice" + if (input.value === '-1') return; + + // Try finding the label by ID + let text = ''; + const labelEl = questionElement.querySelector(`#${input.id.replace(/:/g, '\\:')}_label`); + if (labelEl) { + text = labelEl.textContent ?? ''; + } else { + text = input.parentElement?.textContent ?? ''; + } + + text = normalizeText(text.replace('Clear my choice', '')); + if (text) { + options.push({ + index, + text + }); + } + }); + + return options; +} + +/** + * Parse the question DOM element to determine the strict question type and structural query + * @param questionElement The question container element + * @param normalizedQuestionText The full text of the question + * @returns MoodleQuestionQuery object or null if parsing fails + */ +export function parseMoodleQuestion( + questionElement: HTMLElement, + normalizedQuestionText: string +): MoodleQuestionQuery | null { + const container = + questionElement.closest('.que') || questionElement.closest('.formulation') || questionElement; + + if (container.classList.contains('multichoice')) { + const checkboxes = container.querySelectorAll( + '.answer input[type="checkbox"]' + ); + const radios = container.querySelectorAll('.answer input[type="radio"]'); + + if (checkboxes.length > 0) { + return { + question_type: MoodleQuestionType.MULTIPLE_CHOICE, + question_text: normalizedQuestionText, + answer_options: extractOptions(container as HTMLElement, '.answer input[type="checkbox"]') + }; + } else if (radios.length > 0) { + return { + question_type: MoodleQuestionType.SINGLE_CHOICE, + question_text: normalizedQuestionText, + answer_options: extractOptions(container as HTMLElement, '.answer input[type="radio"]') + }; + } + } + + if (container.classList.contains('truefalse')) { + return { + question_type: MoodleQuestionType.TRUE_FALSE, + question_text: normalizedQuestionText + }; + } + + if (container.classList.contains('shortanswer')) { + return { + question_type: MoodleQuestionType.SHORT_TEXT, + question_text: normalizedQuestionText + }; + } + + if (container.classList.contains('numerical')) { + return { + question_type: MoodleQuestionType.NUMERICAL, + question_text: normalizedQuestionText + }; + } + + if (container.classList.contains('essay')) { + return { + question_type: MoodleQuestionType.ESSAY, + question_text: normalizedQuestionText + }; + } + + return null; +} diff --git a/src/background/core/questions/atto.ts b/src/background/core/questions/atto.ts index 0c45ec3..5b25949 100644 --- a/src/background/core/questions/atto.ts +++ b/src/background/core/questions/atto.ts @@ -29,18 +29,23 @@ function handleAtto( const textContainer = iframeBody.querySelector('p'); if (!textContainer) return false; + const answerText = + gptAnswer.response && 'correct_answer' in gptAnswer.response + ? String((gptAnswer.response as any).correct_answer) + : gptAnswer.rawResponse; + if (config.typing) { let index = 0; const eventHandler = function (event: KeyboardEvent) { event.preventDefault(); - if (event.key === 'Backspace' || index >= gptAnswer.response.length) { + if (event.key === 'Backspace' || index >= answerText.length) { iframe.contentWindow!.removeEventListener('keydown', eventHandler); return; } // Append text one character at a time - const textNode = document.createTextNode(gptAnswer.response.charAt(index++)); + const textNode = document.createTextNode(answerText.charAt(index++)); textContainer.appendChild(textNode); // Move the cursor after the last character @@ -58,7 +63,7 @@ function handleAtto( iframe.contentWindow.addEventListener('keydown', eventHandler); } else { - textContainer.textContent += gptAnswer.response; + textContainer.textContent += answerText; } return true; diff --git a/src/background/core/questions/checkbox.ts b/src/background/core/questions/checkbox.ts index b033b49..c6b4902 100644 --- a/src/background/core/questions/checkbox.ts +++ b/src/background/core/questions/checkbox.ts @@ -3,6 +3,7 @@ import type GPTAnswer from '../../types/gpt-answer'; import Logs from 'background/utils/logs'; import normalizeText from 'background/utils/normalize-text'; import { pickBestReponse } from 'background/utils/pick-best-response'; +import { MoodleQuestionType, MultipleChoiceResponse } from '../../types/question-types'; /** * Handle input checkbox elements @@ -22,29 +23,52 @@ function handleCheckbox( return false; } - const corrects = gptAnswer.normalizedResponse.split('\n'); - - const possibleAnswers = Array.from(inputList) - .map(inp => ({ - element: inp as HTMLInputElement, - value: normalizeText(inp?.parentElement?.textContent ?? '') - })) - .filter(obj => obj.value !== ''); - - // Find the best answers elements const correctElements: Set = new Set(); - for (const correct of corrects) { - const bestAnswer = pickBestReponse(correct, possibleAnswers); - if (config.logs && bestAnswer.value) { - Logs.bestAnswer(bestAnswer.value, bestAnswer.similarity); + // New structured mode + if ( + gptAnswer.response && + gptAnswer.response.question_type === MoodleQuestionType.MULTIPLE_CHOICE + ) { + const response = gptAnswer.response as MultipleChoiceResponse; + const correctIndexes = new Set(response.correct_answer.indexes); + + Array.from(inputList).forEach((inp, index) => { + const element = inp as HTMLInputElement; + if (correctIndexes.has(index)) { + correctElements.add(element); + } + }); + + if (config.logs) { + console.log('Using strict mode multiple choice selection:', response.correct_answer.indexes); } + } + // Fallback to fuzzy text matching if structural failed + else { + const corrects = gptAnswer.rawResponse.split('\n'); - correctElements.add(bestAnswer.element as HTMLInputElement); + const possibleAnswers = Array.from(inputList) + .map(inp => ({ + element: inp as HTMLInputElement, + value: normalizeText(inp?.parentElement?.textContent ?? '') + })) + .filter(obj => obj.value !== ''); + + for (const correct of corrects) { + const bestAnswer = pickBestReponse(correct, possibleAnswers); + + if (config.logs && bestAnswer.value) { + Logs.bestAnswer(bestAnswer.value, bestAnswer.similarity); + } + + correctElements.add(bestAnswer.element as HTMLInputElement); + } } // Check if it should be checked or not - for (const element of possibleAnswers.map(e => e.element)) { + for (const inp of Array.from(inputList)) { + const element = inp as HTMLInputElement; const needAction = (element.checked && !correctElements.has(element)) || (!element.checked && correctElements.has(element)); diff --git a/src/background/core/questions/contenteditable.ts b/src/background/core/questions/contenteditable.ts index c3da3d6..7dadd1b 100644 --- a/src/background/core/questions/contenteditable.ts +++ b/src/background/core/questions/contenteditable.ts @@ -27,18 +27,23 @@ function handleContentEditable( return false; } + const answerText = + gptAnswer.response && 'correct_answer' in gptAnswer.response + ? String((gptAnswer.response as any).correct_answer) + : gptAnswer.rawResponse; + if (config.typing) { let index = 0; const eventHandler = function (event: KeyboardEvent) { event.preventDefault(); - if (event.key === 'Backspace' || index >= gptAnswer.response.length) { + if (event.key === 'Backspace' || index >= answerText.length) { input.removeEventListener('keydown', eventHandler); return; } - input.textContent = gptAnswer.response.slice(0, ++index); + input.textContent = answerText.slice(0, ++index); // Put the cursor at the end of the typed text input.focus(); @@ -54,7 +59,7 @@ function handleContentEditable( input.addEventListener('keydown', eventHandler); } else { - input.textContent = gptAnswer.response; + input.textContent = answerText; } return true; diff --git a/src/background/core/questions/number.ts b/src/background/core/questions/number.ts index 2131b3a..c5d4354 100644 --- a/src/background/core/questions/number.ts +++ b/src/background/core/questions/number.ts @@ -22,7 +22,11 @@ function handleNumber( return false; } - const number = gptAnswer.normalizedResponse.match(/\d+([,.]\d+)?/gi)?.[0]?.replace(',', '.'); + const rawNumberStr = + gptAnswer.response && 'correct_answer' in gptAnswer.response + ? String((gptAnswer.response as any).correct_answer) + : gptAnswer.rawResponse; + const number = rawNumberStr.match(/\d+([,.]\d+)?/gi)?.[0]?.replace(',', '.'); if (number === undefined) return false; diff --git a/src/background/core/questions/radio.ts b/src/background/core/questions/radio.ts index 33de6b2..d7d29f3 100644 --- a/src/background/core/questions/radio.ts +++ b/src/background/core/questions/radio.ts @@ -3,6 +3,11 @@ import type GPTAnswer from '../../types/gpt-answer'; import Logs from 'background/utils/logs'; import normalizeText from 'background/utils/normalize-text'; import { pickBestReponse } from 'background/utils/pick-best-response'; +import { + MoodleQuestionType, + SingleChoiceResponse, + TrueFalseResponse +} from '../../types/question-types'; /** * Handle input radio elements @@ -22,26 +27,60 @@ function handleRadio( return false; } - const possibleAnswers = Array.from(inputList) - .map(inp => ({ - element: inp, - value: normalizeText(inp?.parentElement?.textContent ?? '') - })) - .filter(obj => obj.value !== ''); + let correctInput: HTMLInputElement | null = null; - const bestAnswer = pickBestReponse(gptAnswer.normalizedResponse, possibleAnswers); + if (gptAnswer.response && gptAnswer.response.question_type === MoodleQuestionType.SINGLE_CHOICE) { + const res = gptAnswer.response as SingleChoiceResponse; + const index = res.correct_answer.index; + if (index >= 0 && index < inputList.length) { + correctInput = inputList[index] as HTMLInputElement; + } + } else if ( + gptAnswer.response && + gptAnswer.response.question_type === MoodleQuestionType.TRUE_FALSE + ) { + const res = gptAnswer.response as TrueFalseResponse; + // In Moodle true/false typically true is index 0 and false is index 1 or vice-versa. + // The query extracted options though... wait! True/false doesn't use `extractOptions`! + // So we need to match text "true" or "false", or 1/0. + const isTrue = res.correct_answer === true; - if (config.logs && bestAnswer.value) { - Logs.bestAnswer(bestAnswer.value, bestAnswer.similarity); + // Quick fallback fuzzy to "true" or "false" if we don't know the exact indices + // True/false has radio options, so we can search by text. + const possibleAnswers = Array.from(inputList) + .map(inp => ({ + element: inp, + value: normalizeText(inp?.parentElement?.textContent ?? '') + })) + .filter(obj => obj.value !== ''); + + const bestAnswer = pickBestReponse(isTrue ? 'true' : 'false', possibleAnswers); + correctInput = bestAnswer.element as HTMLInputElement; + } else { + // Fallback parsing + const possibleAnswers = Array.from(inputList) + .map(inp => ({ + element: inp, + value: normalizeText(inp?.parentElement?.textContent ?? '') + })) + .filter(obj => obj.value !== ''); + + const bestAnswer = pickBestReponse(gptAnswer.rawResponse, possibleAnswers); + + if (config.logs && bestAnswer.value) { + Logs.bestAnswer(bestAnswer.value, bestAnswer.similarity); + } + correctInput = bestAnswer.element as HTMLInputElement; } - const correctInput = bestAnswer.element as HTMLInputElement; - if (config.mouseover) { - correctInput.addEventListener('mouseover', () => correctInput.click(), { - once: true - }); - } else { - correctInput.click(); + if (correctInput) { + if (config.mouseover) { + correctInput.addEventListener('mouseover', () => (correctInput as HTMLInputElement).click(), { + once: true + }); + } else { + correctInput.click(); + } } return true; diff --git a/src/background/core/questions/select.ts b/src/background/core/questions/select.ts index 846e836..10e48c6 100644 --- a/src/background/core/questions/select.ts +++ b/src/background/core/questions/select.ts @@ -18,7 +18,12 @@ function handleSelect( ): boolean { if (inputList.length === 0 || inputList[0].tagName !== 'SELECT') return false; - const corrects = gptAnswer.normalizedResponse.split('\n'); + const rawResponse = + gptAnswer.response && 'correct_answer' in gptAnswer.response + ? String((gptAnswer.response as any).correct_answer) + : gptAnswer.rawResponse; + + const corrects = rawResponse.split('\n'); if (config.logs) Logs.array(corrects); diff --git a/src/background/core/questions/textbox.ts b/src/background/core/questions/textbox.ts index a1a94ba..ba82980 100644 --- a/src/background/core/questions/textbox.ts +++ b/src/background/core/questions/textbox.ts @@ -22,23 +22,28 @@ function handleTextbox( return false; } + const answerText = + gptAnswer.response && 'correct_answer' in gptAnswer.response + ? String((gptAnswer.response as any).correct_answer) + : gptAnswer.rawResponse; + if (config.typing) { let index = 0; const eventHandler = function (event: Event) { event.preventDefault(); - if ((event).key === 'Backspace' || index >= gptAnswer.response.length) { + if ((event).key === 'Backspace' || index >= answerText.length) { input.removeEventListener('keydown', eventHandler); return; } - input.value = gptAnswer.response.slice(0, ++index); + input.value = answerText.slice(0, ++index); }; input.addEventListener('keydown', eventHandler); } else { - input.value = gptAnswer.response; + input.value = answerText; } return true; diff --git a/src/background/core/utils/question-schemas.ts b/src/background/core/utils/question-schemas.ts new file mode 100644 index 0000000..29dbc82 --- /dev/null +++ b/src/background/core/utils/question-schemas.ts @@ -0,0 +1,98 @@ +import { MoodleQuestionType } from '../../types/question-types'; + +export const QuestionSchemas: Record = { + [MoodleQuestionType.SINGLE_CHOICE]: { + name: 'single_choice_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.SINGLE_CHOICE] }, + correct_answer: { + type: 'object', + properties: { index: { type: 'integer' } }, + required: ['index'], + additionalProperties: false + } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.MULTIPLE_CHOICE]: { + name: 'multiple_choice_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.MULTIPLE_CHOICE] }, + correct_answer: { + type: 'object', + properties: { + indexes: { + type: 'array', + items: { type: 'integer' } + } + }, + required: ['indexes'], + additionalProperties: false + } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.TRUE_FALSE]: { + name: 'true_false_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.TRUE_FALSE] }, + correct_answer: { type: 'boolean' } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.SHORT_TEXT]: { + name: 'short_text_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.SHORT_TEXT] }, + correct_answer: { type: 'string' } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.NUMERICAL]: { + name: 'numerical_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.NUMERICAL] }, + correct_answer: { type: 'number' } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.ESSAY]: { + name: 'essay_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.ESSAY] }, + correct_answer: { type: 'string' } + }, + required: ['question_type', 'correct_answer'], + additionalProperties: false + } + }, + [MoodleQuestionType.UNKNOWN]: undefined +}; diff --git a/src/background/types/gpt-answer.ts b/src/background/types/gpt-answer.ts index 32a7694..4d668d4 100644 --- a/src/background/types/gpt-answer.ts +++ b/src/background/types/gpt-answer.ts @@ -1,7 +1,9 @@ +import { MoodleQuestionQuery, MoodleQuestionResponse } from './question-types'; + type GPTAnswer = { - question: string; - response: string; - normalizedResponse: string; + questionQuery: MoodleQuestionQuery | null; + response: MoodleQuestionResponse | null; + rawResponse: string; // Keep the original just in case or for logging/unknown }; export default GPTAnswer; diff --git a/src/background/types/question-types.ts b/src/background/types/question-types.ts new file mode 100644 index 0000000..0d495f9 --- /dev/null +++ b/src/background/types/question-types.ts @@ -0,0 +1,96 @@ +export enum MoodleQuestionType { + SINGLE_CHOICE = 'single_choice', + MULTIPLE_CHOICE = 'multiple_choice', + TRUE_FALSE = 'true_false', + SHORT_TEXT = 'short_text', + NUMERICAL = 'numerical', + ESSAY = 'essay', + UNKNOWN = 'unknown' +} + +export interface AnswerOption { + index: number; + text: string; +} + +// ==== Queries sent to LLM ==== + +export interface SingleChoiceQuery { + question_type: MoodleQuestionType.SINGLE_CHOICE; + question_text: string; + answer_options: AnswerOption[]; +} + +export interface MultipleChoiceQuery { + question_type: MoodleQuestionType.MULTIPLE_CHOICE; + question_text: string; + answer_options: AnswerOption[]; +} + +export interface TrueFalseQuery { + question_type: MoodleQuestionType.TRUE_FALSE; + question_text: string; +} + +export interface ShortTextQuery { + question_type: MoodleQuestionType.SHORT_TEXT; + question_text: string; +} + +export interface NumericalQuery { + question_type: MoodleQuestionType.NUMERICAL; + question_text: string; +} + +export interface EssayQuery { + question_type: MoodleQuestionType.ESSAY; + question_text: string; +} + +export type MoodleQuestionQuery = + | SingleChoiceQuery + | MultipleChoiceQuery + | TrueFalseQuery + | ShortTextQuery + | NumericalQuery + | EssayQuery; + +// ==== Expected LLM Responses ==== + +export interface SingleChoiceResponse { + question_type: MoodleQuestionType.SINGLE_CHOICE; + correct_answer: { index: number }; +} + +export interface MultipleChoiceResponse { + question_type: MoodleQuestionType.MULTIPLE_CHOICE; + correct_answer: { indexes: number[] }; +} + +export interface TrueFalseResponse { + question_type: MoodleQuestionType.TRUE_FALSE; + correct_answer: boolean; +} + +export interface ShortTextResponse { + question_type: MoodleQuestionType.SHORT_TEXT; + correct_answer: string; +} + +export interface NumericalResponse { + question_type: MoodleQuestionType.NUMERICAL; + correct_answer: number; +} + +export interface EssayResponse { + question_type: MoodleQuestionType.ESSAY; + correct_answer: string; +} + +export type MoodleQuestionResponse = + | SingleChoiceResponse + | MultipleChoiceResponse + | TrueFalseResponse + | ShortTextResponse + | NumericalResponse + | EssayResponse; diff --git a/tsconfig.json b/tsconfig.json index 71e993e..f9a22c7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "strict": true, "baseUrl": "src", - "module": "esnext", + "module": "ESNext", + "moduleResolution": "Bundler", "target": "ES6", "esModuleInterop": true, "allowSyntheticDefaultImports": true, From 72be91d7965efd88c278b1ed75c4984fe416dcde Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 11 Apr 2026 21:20:46 +0200 Subject: [PATCH 02/12] Refactor: Add support for Match, Gapselect, DDwtos and Calculated Moodle question types --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- question_types/calculated_questions.html | 153 ++++++++++++ question_types/drag_drop_into_text.html | 232 ++++++++++++++++++ question_types/match_question.html | 176 +++++++++++++ question_types/select_missing_word.html | 184 ++++++++++++++ src/background/core/code-listener.ts | 3 +- src/background/core/modes/autocomplete.ts | 6 + src/background/core/parse-question.ts | 86 ++++++- src/background/core/questions/ddwtos.ts | 44 ++++ src/background/core/questions/gapselect.ts | 39 +++ src/background/core/questions/match.ts | 36 +++ src/background/core/utils/question-schemas.ts | 72 ++++++ src/background/types/question-types.ts | 47 +++- 14 files changed, 1075 insertions(+), 7 deletions(-) create mode 100644 question_types/calculated_questions.html create mode 100644 question_types/drag_drop_into_text.html create mode 100644 question_types/match_question.html create mode 100644 question_types/select_missing_word.html create mode 100644 src/background/core/questions/ddwtos.ts create mode 100644 src/background/core/questions/gapselect.ts create mode 100644 src/background/core/questions/match.ts diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index e66de9a..bb6d3e8 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function h(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function d(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}return s.classList.contains("truefalse")?{question_type:o.TRUE_FALSE,question_text:t}:s.classList.contains("shortanswer")?{question_type:o.SHORT_TEXT,question_text:t}:s.classList.contains("numerical")?{question_type:o.NUMERICAL,question_text:t}:s.classList.contains("essay")?{question_type:o.ESSAY,question_text:t}:null}(s,n),r=t?JSON.stringify(t,null,2):n,i={role:"user",content:yield l(e,s,r)},p=s=>{const n={history:s};return{messages:[c,...s,i],query:t,saveResponse(t){if(e.history){let e;n.history.push(i),n.history.push({role:"assistant",content:t});const s=h(),r=u();e=null!==s&&d(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return p([]);const f=h(),m=u();return null!==f&&d(f,m)?p(f.history):p(m.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new $(e,r,s,n):403===e?new E(e,r,s,n):404===e?new O(e,r,s,n):409===e?new R(e,r,s,n):422===e?new I(e,r,s,n):429===e?new k(e,r,s,n):e>=500?new q(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class $ extends b{}class E extends b{}class O extends b{}class R extends b{}class I extends b{}class k extends b{}class q extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(Deno.build.os),"X-Stainless-Arch":F(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(globalThis.process.platform??"unknown"),"X-Stainless-Arch":F(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const F=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",H=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function V(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const z=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),G="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:G,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=d?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?d?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const $=a?String(t).replace(/\./g,"%2E"):String(t),E=n&&N(_)&&1===_.length?$+"[]":$;if(r&&N(_)&&0===_.length)return E+"[]";for(let t=0;t0?h+u:""}let ue,he;function de(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(he??(t=new globalThis.TextDecoder,he=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?de(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void $e(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function $e(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Ee=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var Oe,Re,Ie;class ke{constructor(e,t,s){this.iterator=e,Oe.set(this,void 0),this.controller=t,f(this,Oe,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?$e(s):console;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new qe,n=new ge,r=V(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?de(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=V(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[(Oe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new ke((()=>n(e)),this.controller,m(this,Oe,"f")),new ke((()=>n(t)),this.controller,m(this,Oe,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=de(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class qe{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return $e(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):ke.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return $e(e).debug(`[${n}] response parsed`,Ee({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Re.set(this,void 0),f(this,Re,e)}_thenUnwrap(e){return new Le(m(this,Re,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Re,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Re=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Fe=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],He=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(Fe(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ve=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function ze(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ve(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Fe(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await ze(s))}return t}class Ge{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends Ge{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,ht=e=>"tool"===e?.role;var dt,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,$t,Et,Ot,Rt,It,kt,qt,Ct;class Tt{constructor(){dt.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,dt,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,dt=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),$t.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),ht(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,$t,"m",Et).call(this)}async finalMessage(){return await this.done(),m(this,$t,"m",Ot).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,$t,"m",Rt).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,$t,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,$t,"m",kt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,$t,"m",Ot).call(this);t&&this._emit("finalMessage",t);const s=m(this,$t,"m",Et).call(this);s&&this._emit("finalContent",s);const n=m(this,$t,"m",Rt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,$t,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,$t,"m",kt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,$t,"m",qt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const h="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,$t,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}$t=new WeakSet,Et=function(){return m(this,$t,"m",Ot).call(this).content??null},Ot=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Rt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ht(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},kt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},qt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ft=32,Ht=64,Xt=128,Jt=256,Kt=511;class Vt extends Error{}class zt extends Error{}const Gt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Vt(`${e} at position ${n}`)},o=e=>{throw new zt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ft&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ft&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Bt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Gt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=ke.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${hs(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${hs(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${hs(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${hs(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:h,refusal:d,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),d&&(e.message.refusal=(e.message.refusal||"")+d),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function hs(e){return JSON.stringify(e)}class ds extends us{static fromReadableStream(e){const t=new ds(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ds(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends Ge{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?ds.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends Ge{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends Ge{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends Ge{create(e,t){return this._client.post("/audio/transcriptions",He({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends Ge{create(e,t){return this._client.post("/audio/translations",He({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends Ge{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends Ge{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends Ge{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends Ge{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class $s extends Ge{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Es=class extends Ge{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new $s(this._client)}};Es.Sessions=As,Es.TranscriptionSessions=$s;class Os extends Ge{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Rs extends Ge{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var ks,qs,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Fs,Hs,Xs,Js,Ks,Vs,zs,Gs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),ks.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,ks=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new qs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=ke.fromReadableStream(e,this.controller);for await(const e of n)m(this,ks,"m",Hs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new qs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Fs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,ks,"m",Hs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}qs=Zs,Hs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,ks,"m",Vs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,ks,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,ks,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,ks,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,ks,"m",Gs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,ks,"m",zs).call(this,e);switch(f(this,Fs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Fs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Vs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},zs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=qs.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},Gs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,ks,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return qs.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends Ge{constructor(){super(...arguments),this.steps=new Rs(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Rs;class tn extends Ge{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new Os(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=Os;class sn extends Ge{constructor(){super(...arguments),this.realtime=new Es(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Es,sn.Assistants=Ss,sn.Threads=tn;class nn extends Ge{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends Ge{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends Ge{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,He({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends Ge{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends Ge{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends Ge{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends Ge{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&$e(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:($e(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends Ge{}let gn=class extends Ge{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends Ge{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends Ge{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends Ge{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends Ge{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends Ge{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends Ge{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends Ge{}class An extends Ge{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class $n extends Ge{createVariation(e,t){return this._client.post("/images/variations",He({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",He({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class En extends Ge{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class On extends Ge{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Rn extends Ge{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends Ge{constructor(){super(...arguments),this.clientSecrets=new Rn(this._client)}}function kn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?qn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function qn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=Rn;class Fn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Fn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return kn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Hn extends Ge{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends Ge{constructor(){super(...arguments),this.inputItems=new Hn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>qn(t,e)))}stream(e,t){return Fn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Hn;class Jn extends Ge{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,He({body:t,...s},this._client))}}class Kn extends Ge{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Vn extends Ge{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class zn extends Ge{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Gn extends Ge{constructor(){super(...arguments),this.files=new zn(this._client),this.fileBatches=new Vn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;Gn.Files=zn,Gn.FileBatches=Vn;class rr extends Ge{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),h=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),d=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",h,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(d)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new $n(this),this.audio=new vs(this),this.moderations=new On(this),this.models=new En(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new Gn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,z),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if($e(this).debug(`[${c}] sending request`,Ee({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const h=new AbortController,d=await this.fetchWithTimeout(i,o,a,h).catch(_),p=Date.now();if(d instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(d)||/timed? ?out/i.test(String(d)+("cause"in d?String(d.cause):""));if(t)return $e(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),$e(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Ee({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),this.retryRequest(n,t,s??c);if($e(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),$e(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Ee({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),r)throw new S;throw new x({cause:d})}const f=`[${c}${l}${[...d.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${d.ok?"succeeded":"failed"} with status ${d.status} in ${p-u}ms`;if(!d.ok){const e=await this.shouldRetry(d);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(d.body),$e(this).info(`${f} - ${e}`),$e(this).debug(`[${c}] response error (${e})`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,d.headers)}const r=e?"error; no more retries left":"error; not retryable";$e(this).info(`${f} - ${r}`);const o=await d.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;$e(this).debug(`[${c}] response error (${r})`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(d.status,i,a,d.headers)}return $e(this).info(f),$e(this).debug(`[${c}] response start`,Ee({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),{response:d,options:n,controller:h,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=O,or.ConflictError=R,or.RateLimitError=k,or.BadRequestError=A,or.AuthenticationError=$,or.InternalServerError=q,or.PermissionDeniedError=E,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ve(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await ze(n),t,s)}const n=await ze(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=$n,or.Audio=vs,or.Moderations=On,or.Models=En,or.FineTuning=xn,or.Graders=An,or.VectorStores=Gn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,h=u.closest("select");null!==h&&(e.mouseover?h.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,h={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(h.response_format={type:"json_object"},h.messages.length>0&&"system"===h.messages[0].role&&(h.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const d=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,h),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=d.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,pr,hr,dr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const yr=[],_r=[];function wr(e){const t=_r.findIndex((t=>t.element===e));if(-1!==t){const e=_r.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function br(t){if(_r.length>0){for(const e of _r)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(_r.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=gr.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>wr(n)});_r.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){yr.push(t.key),yr.length>e.code.length&&yr.shift(),yr.join("")===e.code&&(yr.length=0,br(e))}))}(t):br(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function h(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function d(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=h(),r=u();e=null!==s&&d(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=h(),g=u();return null!==m&&d(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new $(e,r,s,n):404===e?new O(e,r,s,n):409===e?new R(e,r,s,n):422===e?new I(e,r,s,n):429===e?new k(e,r,s,n):e>=500?new q(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class $ extends b{}class O extends b{}class R extends b{}class I extends b{}class k extends b{}class q extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=d?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?d?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),$=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return $+"[]";for(let t=0;t0?h+u:""}let ue,he;function de(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(he??(t=new globalThis.TextDecoder,he=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?de(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const $e=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var Oe,Re,Ie;class ke{constructor(e,t,s){this.iterator=e,Oe.set(this,void 0),this.controller=t,f(this,Oe,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new qe,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?de(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[(Oe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new ke((()=>n(e)),this.controller,m(this,Oe,"f")),new ke((()=>n(t)),this.controller,m(this,Oe,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=de(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class qe{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):ke.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,$e({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Re.set(this,void 0),f(this,Re,e)}_thenUnwrap(e){return new Le(m(this,Re,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Re,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Re=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,ht=e=>"tool"===e?.role;var dt,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,$t,Ot,Rt,It,kt,qt,Ct;class Tt{constructor(){dt.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,dt,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,dt=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),ht(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",kt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",Ot).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",$t).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Rt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",kt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",qt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const h="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,$t=function(){return m(this,Et,"m",Ot).call(this).content??null},Ot=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Rt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ht(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},kt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},qt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Bt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=ke.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${hs(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${hs(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${hs(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${hs(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:h,refusal:d,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),d&&(e.message.refusal=(e.message.refusal||"")+d),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function hs(e){return JSON.stringify(e)}class ds extends us{static fromReadableStream(e){const t=new ds(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ds(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?ds.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let $s=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};$s.Sessions=As,$s.TranscriptionSessions=Es;class Os extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Rs extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var ks,qs,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),ks.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,ks=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new qs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=ke.fromReadableStream(e,this.controller);for await(const e of n)m(this,ks,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new qs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,ks,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}qs=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,ks,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,ks,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,ks,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,ks,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,ks,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,ks,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=qs.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,ks,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return qs.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Rs(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Rs;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new Os(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=Os;class sn extends ze{constructor(){super(...arguments),this.realtime=new $s(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=$s,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class $n extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class On extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Rn extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new Rn(this._client)}}function kn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?qn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function qn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=Rn;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return kn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>qn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),h=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),d=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",h,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(d)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new On(this),this.models=new $n(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,$e({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const h=new AbortController,d=await this.fetchWithTimeout(i,o,a,h).catch(_),p=Date.now();if(d instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(d)||/timed? ?out/i.test(String(d)+("cause"in d?String(d.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,$e({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,$e({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),r)throw new S;throw new x({cause:d})}const f=`[${c}${l}${[...d.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${d.ok?"succeeded":"failed"} with status ${d.status} in ${p-u}ms`;if(!d.ok){const e=await this.shouldRetry(d);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(d.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,d.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await d.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(d.status,i,a,d.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),{response:d,options:n,controller:h,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=O,or.ConflictError=R,or.RateLimitError=k,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=q,or.PermissionDeniedError=$,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=On,or.Models=$n,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,h=u.closest("select");null!==h&&(e.mouseover?h.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,h={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(h.response_format={type:"json_object"},h.messages.length>0&&"system"===h.messages[0].role&&(h.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const d=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,h),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=d.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,pr,hr,dr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const br=[],vr=[];function xr(e){const t=vr.findIndex((t=>t.element===e));if(-1!==t){const e=vr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Sr(t){if(vr.length>0){for(const e of vr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(vr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=wr.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>xr(n)});vr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){br.push(t.key),br.length>e.code.length&&br.shift(),br.join("")===e.code&&(br.length=0,Sr(e))}))}(t):Sr(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index 731d8f6..fa8663c 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","getAttribute","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","opt","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","getAttribute","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/question_types/calculated_questions.html b/question_types/calculated_questions.html new file mode 100644 index 0000000..02a8e59 --- /dev/null +++ b/question_types/calculated_questions.html @@ -0,0 +1,153 @@ +
+
+

Question 9

+
Tries remaining: 3
+
Marked out of 1.00
+ + v1 (latest) +
+
+
+

Question text

+
+
+

This is an example of a simple calculated question. It's similar to the calculated question but + with fewer settings smile

+

You won a cool Moodle cooler box at a Moodle Moot and wonder how much it will hold. What is the + volume of your cooler box if its height is 6.4 its length is 9.9 and its width is 7.0?

+
+
+
+
+
+
+
+ +
+
+

Question 8

+
Tries remaining: 3
+
Marked out of 1.00
+ + v2 (latest) +
+
+
+

Question text

+
+
+

This is an example of a calculated multi-choice question. It is like the calculated question in + that the numbers used may vary with each student and question, but the equation remains the same + but it is different from the calculated question in that there is a choice of answers available. +

+

You are making a banner for your organisation's Moodle User Group meeting. Its length is 14 and + its height is 8 What is its area?

+

 

+
+
+
+ Question 8 + Answer +
+
+
+
6
+
+
+
+
+
112
+
+
+
+
+
22
+
+
+
+ +
+
+
+
+
+ +
+
+

Question 7

+
Tries remaining: 2
+
Marked out of 1.00
+ + v1 (latest) +
+
+
+

Question text

+
+
+

This is an example of a calculated question. The numbers will vary but the formula stays the + same. 

+

You're doing some training in your organisation. In your group you have 3 complete beginners and + 14 relatively experienced Moodle users. How many are there in your group in total?

+

 

+
+
+
+
+
+
+
\ No newline at end of file diff --git a/question_types/drag_drop_into_text.html b/question_types/drag_drop_into_text.html new file mode 100644 index 0000000..f53e732 --- /dev/null +++ b/question_types/drag_drop_into_text.html @@ -0,0 +1,232 @@ +
+
+

Question 15

+
Tries remaining: 1
+
Marked out of 5.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+

+ Drag the capital city onto the correct country.There are a few extra just to confuse + you! +

+

+ This is an example of a + Drag and drop into text question type. +

+
+

+ The capital of England is +  Blank 1 Question 15 + which is fairly easy. But do you know that the capital of Wales is +  Blank 2 Question 15 + ? +

+

+ Scotland's capital city is the very beautiful +  Blank 3 Question 15 + while the Republic of Ireland has +  Blank 4 Question 15 + as its capital and Northern Ireland's capital is +  Blank 5 Question 15 +

+
+
+
+ GlasgowGlasgow + DublinDublin + LondonLondon + CardiffCardiff + CorkCork + BelfastBelfast + DerryDerry + EdinburghEdinburgh + SwanseaSwansea +
+
+ +
+ +
+
+
+
diff --git a/question_types/match_question.html b/question_types/match_question.html new file mode 100644 index 0000000..4c341a2 --- /dev/null +++ b/question_types/match_question.html @@ -0,0 +1,176 @@ +
+
+

Question 2

+
Tries remaining: 3
+
Marked out of 1.00
+ + + v3 (latest) +
+
+
+

Question text

+ +
+
+

This is an example of a matching question type.

+

Match the Moodle features to their functionality:

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
diff --git a/question_types/select_missing_word.html b/question_types/select_missing_word.html new file mode 100644 index 0000000..f4d0e83 --- /dev/null +++ b/question_types/select_missing_word.html @@ -0,0 +1,184 @@ +
+
+

Question 16

+
Tries remaining: 1
+
Marked out of 7.00
+ + + v1 (latest) +
+
+
+

Question text

+ +
+

+ Do you know your Great Britain from your United Kingdom and your British Isles? Find out + here! +

+

+ This question uses the + Select missing words question type.  +

+

****************************************************

+

+ Scotland, England and + + + together form   + +

+

+ Together with + + + they also make up   + +

+

+ So what are the British Isles? They are + + + and + , together with many other islands and dependencies such as + . +

+
+
+ +
+
+
+
diff --git a/src/background/core/code-listener.ts b/src/background/core/code-listener.ts index e255d46..1bc5309 100644 --- a/src/background/core/code-listener.ts +++ b/src/background/core/code-listener.ts @@ -58,7 +58,8 @@ function setUpMoodleGpt(config: Config) { const inputTypeQuery = ['checkbox', 'radio', 'text', 'number'] .map(e => `input[type="${e}"]`) .join(','); - const inputQuery = inputTypeQuery + ', textarea, select, [contenteditable], .qtype_essay_editor'; + const inputQuery = + inputTypeQuery + ', textarea, select, [contenteditable], .qtype_essay_editor, .placeinput'; const forms = document.querySelectorAll('.formulation'); // For each form we inject a function on the queqtion diff --git a/src/background/core/modes/autocomplete.ts b/src/background/core/modes/autocomplete.ts index 242119c..0ad10d2 100644 --- a/src/background/core/modes/autocomplete.ts +++ b/src/background/core/modes/autocomplete.ts @@ -8,6 +8,9 @@ import handleCheckbox from 'background/core/questions/checkbox'; import handleSelect from 'background/core/questions/select'; import handleTextbox from 'background/core/questions/textbox'; import handleAtto from 'background/core/questions/atto'; +import handleMatch from 'background/core/questions/match'; +import handleGapSelect from 'background/core/questions/gapselect'; +import handleDragDropText from 'background/core/questions/ddwtos'; type Props = { config: Config; @@ -31,6 +34,9 @@ function autoCompleteMode(props: Props) { handleContentEditable, handleTextbox, handleNumber, + handleMatch, + handleGapSelect, + handleDragDropText, handleSelect, handleRadio, handleCheckbox diff --git a/src/background/core/parse-question.ts b/src/background/core/parse-question.ts index ef0cee0..0c61847 100644 --- a/src/background/core/parse-question.ts +++ b/src/background/core/parse-question.ts @@ -46,7 +46,10 @@ export function parseMoodleQuestion( const container = questionElement.closest('.que') || questionElement.closest('.formulation') || questionElement; - if (container.classList.contains('multichoice')) { + if ( + container.classList.contains('multichoice') || + container.classList.contains('calculatedmulti') + ) { const checkboxes = container.querySelectorAll( '.answer input[type="checkbox"]' ); @@ -81,7 +84,11 @@ export function parseMoodleQuestion( }; } - if (container.classList.contains('numerical')) { + if ( + container.classList.contains('numerical') || + container.classList.contains('calculated') || + container.classList.contains('calculatedsimple') + ) { return { question_type: MoodleQuestionType.NUMERICAL, question_text: normalizedQuestionText @@ -95,5 +102,80 @@ export function parseMoodleQuestion( }; } + if (container.classList.contains('match')) { + const subQuestions: { index: number; text: string }[] = []; + const firstSelectOptions: { index: number; text: string }[] = []; + + const rows = container.querySelectorAll('tr'); + let subIndex = 0; + rows.forEach(row => { + const textCell = row.querySelector('.text'); + const select = row.querySelector('select'); + if (textCell && select) { + subQuestions.push({ index: subIndex, text: normalizeText(textCell.textContent || '') }); + if (subIndex === 0) { + const options = select.querySelectorAll('option'); + let optionIndexCounter = 0; + Array.from(options) + .slice(1) + .forEach(opt => { + firstSelectOptions.push({ + index: optionIndexCounter++, + text: normalizeText(opt.textContent || '') + }); + }); + } + subIndex++; + } + }); + + return { + question_type: MoodleQuestionType.MATCH, + question_text: normalizedQuestionText, + sub_questions: subQuestions, + options: firstSelectOptions + }; + } + + if (container.classList.contains('gapselect')) { + const selects = container.querySelectorAll('select'); + const dropDowns: { index: number; options: { index: number; text: string }[] }[] = []; + + selects.forEach((select, dropIndex) => { + const options = select.querySelectorAll('option'); + const optArr: { index: number; text: string }[] = []; + let optionIndexCounter = 0; + Array.from(options) + .slice(1) + .forEach(opt => { + optArr.push({ index: optionIndexCounter++, text: normalizeText(opt.textContent || '') }); + }); + dropDowns.push({ index: dropIndex, options: optArr }); + }); + + return { + question_type: MoodleQuestionType.SELECT_MISSING_WORD, + question_text: normalizedQuestionText, + drop_downs: dropDowns + }; + } + + if (container.classList.contains('ddwtos')) { + const dragContainer = container.querySelector('.answercontainer'); + const draggables: { index: number; text: string }[] = []; + if (dragContainer) { + const dragHomes = dragContainer.querySelectorAll('.draghome.unplaced'); + dragHomes.forEach((drag, idx) => { + draggables.push({ index: idx, text: normalizeText(drag.textContent || '') }); + }); + } + + return { + question_type: MoodleQuestionType.DRAG_DROP_TEXT, + question_text: normalizedQuestionText, + draggables + }; + } + return null; } diff --git a/src/background/core/questions/ddwtos.ts b/src/background/core/questions/ddwtos.ts new file mode 100644 index 0000000..9131fa4 --- /dev/null +++ b/src/background/core/questions/ddwtos.ts @@ -0,0 +1,44 @@ +import type Config from '../../types/config'; +import type GPTAnswer from '../../types/gpt-answer'; +import type { DragDropTextResponse } from '../../types/question-types'; +import { MoodleQuestionType } from '../../types/question-types'; + +export default function handleDragDropText( + config: Config, + inputList: NodeListOf, + gptAnswer: GPTAnswer +): boolean { + if (!gptAnswer.response || gptAnswer.response.question_type !== MoodleQuestionType.DRAG_DROP_TEXT) + return false; + + const response = gptAnswer.response as DragDropTextResponse; + const hiddenInputs = Array.from(inputList).filter(el => + el.classList.contains('placeinput') + ) as HTMLInputElement[]; + + for (const answer of response.correct_answers) { + const hiddenInput = hiddenInputs[answer.blank_index]; + if (!hiddenInput) continue; + + const container = hiddenInput.closest('.que'); + if (!container) continue; + + const dragHomes = container.querySelectorAll('.draghome.unplaced'); + const targetDrag = dragHomes[answer.draggable_index]; + if (!targetDrag) continue; + + const choiceMatch = targetDrag.className.match(/choice(\d+)/); + if (!choiceMatch) continue; + + const choiceValue = choiceMatch[1]; + hiddenInput.value = choiceValue; + + // visually update the drag drop UI string + const blankSpan = container.querySelector(`.place${answer.blank_index + 1}.drop`); + if (blankSpan) { + blankSpan.textContent = targetDrag.textContent; + } + } + + return true; +} diff --git a/src/background/core/questions/gapselect.ts b/src/background/core/questions/gapselect.ts new file mode 100644 index 0000000..6364f1b --- /dev/null +++ b/src/background/core/questions/gapselect.ts @@ -0,0 +1,39 @@ +import type Config from '../../types/config'; +import type GPTAnswer from '../../types/gpt-answer'; +import type { SelectMissingWordResponse } from '../../types/question-types'; +import { MoodleQuestionType } from '../../types/question-types'; + +export default function handleGapSelect( + config: Config, + inputList: NodeListOf, + gptAnswer: GPTAnswer +): boolean { + if ( + !gptAnswer.response || + gptAnswer.response.question_type !== MoodleQuestionType.SELECT_MISSING_WORD + ) + return false; + + const response = gptAnswer.response as SelectMissingWordResponse; + const selects = Array.from(inputList).filter( + el => el.tagName === 'SELECT' + ) as HTMLSelectElement[]; + + for (const answer of response.correct_answers) { + const selectEl = selects[answer.drop_down_index]; + if (!selectEl) continue; + + const options = selectEl.querySelectorAll('option'); + const correctOption = options[answer.option_index + 1]; + + if (correctOption) { + if (config.mouseover) { + selectEl.addEventListener('click', () => (correctOption.selected = true), { once: true }); + } else { + correctOption.selected = true; + } + } + } + + return true; +} diff --git a/src/background/core/questions/match.ts b/src/background/core/questions/match.ts new file mode 100644 index 0000000..ed4c337 --- /dev/null +++ b/src/background/core/questions/match.ts @@ -0,0 +1,36 @@ +import type Config from '../../types/config'; +import type GPTAnswer from '../../types/gpt-answer'; +import type { MatchResponse } from '../../types/question-types'; +import { MoodleQuestionType } from '../../types/question-types'; + +export default function handleMatch( + config: Config, + inputList: NodeListOf, + gptAnswer: GPTAnswer +): boolean { + if (!gptAnswer.response || gptAnswer.response.question_type !== MoodleQuestionType.MATCH) + return false; + + const response = gptAnswer.response as MatchResponse; + const selects = Array.from(inputList).filter( + el => el.tagName === 'SELECT' + ) as HTMLSelectElement[]; + + for (const answer of response.correct_answers) { + const selectEl = selects[answer.sub_question_index]; + if (!selectEl) continue; + + const options = selectEl.querySelectorAll('option'); + const correctOption = options[answer.option_index + 1]; // + 1 because index 0 is "Choose..." + + if (correctOption) { + if (config.mouseover) { + selectEl.addEventListener('click', () => (correctOption.selected = true), { once: true }); + } else { + correctOption.selected = true; + } + } + } + + return true; +} diff --git a/src/background/core/utils/question-schemas.ts b/src/background/core/utils/question-schemas.ts index 29dbc82..aa0277c 100644 --- a/src/background/core/utils/question-schemas.ts +++ b/src/background/core/utils/question-schemas.ts @@ -94,5 +94,77 @@ export const QuestionSchemas: Record = { additionalProperties: false } }, + [MoodleQuestionType.MATCH]: { + name: 'match_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.MATCH] }, + correct_answers: { + type: 'array', + items: { + type: 'object', + properties: { + sub_question_index: { type: 'integer' }, + option_index: { type: 'integer' } + }, + required: ['sub_question_index', 'option_index'], + additionalProperties: false + } + } + }, + required: ['question_type', 'correct_answers'], + additionalProperties: false + } + }, + [MoodleQuestionType.SELECT_MISSING_WORD]: { + name: 'select_missing_word_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.SELECT_MISSING_WORD] }, + correct_answers: { + type: 'array', + items: { + type: 'object', + properties: { + drop_down_index: { type: 'integer' }, + option_index: { type: 'integer' } + }, + required: ['drop_down_index', 'option_index'], + additionalProperties: false + } + } + }, + required: ['question_type', 'correct_answers'], + additionalProperties: false + } + }, + [MoodleQuestionType.DRAG_DROP_TEXT]: { + name: 'drag_drop_text_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.DRAG_DROP_TEXT] }, + correct_answers: { + type: 'array', + items: { + type: 'object', + properties: { + blank_index: { type: 'integer' }, + draggable_index: { type: 'integer' } + }, + required: ['blank_index', 'draggable_index'], + additionalProperties: false + } + } + }, + required: ['question_type', 'correct_answers'], + additionalProperties: false + } + }, [MoodleQuestionType.UNKNOWN]: undefined }; diff --git a/src/background/types/question-types.ts b/src/background/types/question-types.ts index 0d495f9..c858130 100644 --- a/src/background/types/question-types.ts +++ b/src/background/types/question-types.ts @@ -5,6 +5,9 @@ export enum MoodleQuestionType { SHORT_TEXT = 'short_text', NUMERICAL = 'numerical', ESSAY = 'essay', + MATCH = 'match', + SELECT_MISSING_WORD = 'select_missing_word', + DRAG_DROP_TEXT = 'drag_drop_text', UNKNOWN = 'unknown' } @@ -47,13 +50,35 @@ export interface EssayQuery { question_text: string; } +export interface MatchQuery { + question_type: MoodleQuestionType.MATCH; + question_text: string; + sub_questions: { index: number; text: string }[]; + options: { index: number; text: string }[]; +} + +export interface SelectMissingWordQuery { + question_type: MoodleQuestionType.SELECT_MISSING_WORD; + question_text: string; + drop_downs: { index: number; options: { index: number; text: string }[] }[]; +} + +export interface DragDropTextQuery { + question_type: MoodleQuestionType.DRAG_DROP_TEXT; + question_text: string; + draggables: { index: number; text: string }[]; +} + export type MoodleQuestionQuery = | SingleChoiceQuery | MultipleChoiceQuery | TrueFalseQuery | ShortTextQuery | NumericalQuery - | EssayQuery; + | EssayQuery + | MatchQuery + | SelectMissingWordQuery + | DragDropTextQuery; // ==== Expected LLM Responses ==== @@ -87,10 +112,28 @@ export interface EssayResponse { correct_answer: string; } +export interface MatchResponse { + question_type: MoodleQuestionType.MATCH; + correct_answers: { sub_question_index: number; option_index: number }[]; +} + +export interface SelectMissingWordResponse { + question_type: MoodleQuestionType.SELECT_MISSING_WORD; + correct_answers: { drop_down_index: number; option_index: number }[]; +} + +export interface DragDropTextResponse { + question_type: MoodleQuestionType.DRAG_DROP_TEXT; + correct_answers: { blank_index: number; draggable_index: number }[]; +} + export type MoodleQuestionResponse = | SingleChoiceResponse | MultipleChoiceResponse | TrueFalseResponse | ShortTextResponse | NumericalResponse - | EssayResponse; + | EssayResponse + | MatchResponse + | SelectMissingWordResponse + | DragDropTextResponse; From 1e44cf4129dfc04714b0bd3b165a0395dcfba926 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 11 Apr 2026 22:17:53 +0200 Subject: [PATCH 03/12] Docs: Update README with new supported question types and JSON parsing engine --- README.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fc8b499..40215d3 100644 --- a/README.md +++ b/README.md @@ -127,10 +127,24 @@ Person 2 | Yann  | 19/01/2000 | no ## Supported questions type -### Select +MoodleGPT now utilizes strict strongly-typed JSON schema generation. Complex question logic is mapped directly from the Moodle DOM structure to the LLM backend for perfect, index-matched interaction. + +### Calculated Questions (Numerical / Multi) + +![Calculated](./assets/equations.gif) + +### Select (Missing Words / Gapselect) ![Select](./assets/select.gif) +### Match Questions + +Extracts options seamlessly per row. + +### Drag and Drop Into Text + +Under the hood matching using native `.placeinput` tags for accurate invisible placement dropping. + ### Put in order question ![Order](./assets/order.gif) From a3e828a00e97471908fec92c9e34d1a16f774b74 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sun, 12 Apr 2026 12:57:42 +0200 Subject: [PATCH 04/12] Feat: Add support for Ordering questions --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- question_types/calculated_questions.html | 434 ++++++--- question_types/ordering.html | 821 ++++++++++++++++++ src/background/core/code-listener.ts | 3 +- src/background/core/modes/autocomplete.ts | 2 + src/background/core/parse-question.ts | 24 + src/background/core/questions/ordering.ts | 52 ++ src/background/core/utils/question-schemas.ts | 23 + src/background/types/question-types.ts | 18 +- 10 files changed, 1238 insertions(+), 143 deletions(-) create mode 100644 question_types/ordering.html create mode 100644 src/background/core/questions/ordering.ts diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index bb6d3e8..b317d56 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function h(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function d(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=h(),r=u();e=null!==s&&d(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=h(),g=u();return null!==m&&d(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new $(e,r,s,n):404===e?new O(e,r,s,n):409===e?new R(e,r,s,n):422===e?new I(e,r,s,n):429===e?new k(e,r,s,n):e>=500?new q(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class $ extends b{}class O extends b{}class R extends b{}class I extends b{}class k extends b{}class q extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=d?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?d?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),$=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return $+"[]";for(let t=0;t0?h+u:""}let ue,he;function de(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(he??(t=new globalThis.TextDecoder,he=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?de(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const $e=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var Oe,Re,Ie;class ke{constructor(e,t,s){this.iterator=e,Oe.set(this,void 0),this.controller=t,f(this,Oe,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new qe,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?de(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new ke((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[(Oe=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new ke((()=>n(e)),this.controller,m(this,Oe,"f")),new ke((()=>n(t)),this.controller,m(this,Oe,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=de(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class qe{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):ke.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,$e({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Re.set(this,void 0),f(this,Re,e)}_thenUnwrap(e){return new Le(m(this,Re,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Re,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Re=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,ht=e=>"tool"===e?.role;var dt,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,$t,Ot,Rt,It,kt,qt,Ct;class Tt{constructor(){dt.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,dt,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,dt=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),ht(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",kt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",Ot).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",$t).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Rt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",kt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",qt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const h="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,$t=function(){return m(this,Et,"m",Ot).call(this).content??null},Ot=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Rt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ht(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},kt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},qt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Bt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=ke.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${hs(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${hs(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${hs(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${hs(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:h,refusal:d,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),d&&(e.message.refusal=(e.message.refusal||"")+d),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),h&&(e.message.content=(e.message.content||"")+h,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function hs(e){return JSON.stringify(e)}class ds extends us{static fromReadableStream(e){const t=new ds(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ds(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?ds.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let $s=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};$s.Sessions=As,$s.TranscriptionSessions=Es;class Os extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Rs extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var ks,qs,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),ks.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,ks=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new qs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=ke.fromReadableStream(e,this.controller);for await(const e of n)m(this,ks,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}toReadableStream(){return new ke(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new qs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new qs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,ks,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,ks,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,ks,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}qs=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,ks,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,ks,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,ks,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,ks,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,ks,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,ks,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=qs.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,ks,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return qs.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Rs(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Rs;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new Os(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=Os;class sn extends ze{constructor(){super(...arguments),this.realtime=new $s(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=$s,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class $n extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class On extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Rn extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new Rn(this._client)}}function kn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?qn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function qn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=Rn;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return kn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>qn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),h=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),d=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",h,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(d)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new On(this),this.models=new $n(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,$e({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const h=new AbortController,d=await this.fetchWithTimeout(i,o,a,h).catch(_),p=Date.now();if(d instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(d)||/timed? ?out/i.test(String(d)+("cause"in d?String(d.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,$e({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,$e({retryOfRequestLogID:s,url:i,durationMs:p-u,message:d.message})),r)throw new S;throw new x({cause:d})}const f=`[${c}${l}${[...d.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${d.ok?"succeeded":"failed"} with status ${d.status} in ${p-u}ms`;if(!d.ok){const e=await this.shouldRetry(d);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(d.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,d.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await d.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(d.status,i,a,d.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,$e({retryOfRequestLogID:s,url:d.url,status:d.status,headers:d.headers,durationMs:p-u})),{response:d,options:n,controller:h,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=O,or.ConflictError=R,or.RateLimitError=k,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=q,or.PermissionDeniedError=$,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=On,or.Models=$n,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,h=u.closest("select");null!==h&&(e.mouseover?h.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,h={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(h.response_format={type:"json_object"},h.messages.length>0&&"system"===h.messages[0].role&&(h.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const d=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,h),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=d.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,pr,hr,dr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const br=[],vr=[];function xr(e){const t=vr.findIndex((t=>t.element===e));if(-1!==t){const e=vr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Sr(t){if(vr.length>0){for(const e of vr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(vr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=wr.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>xr(n)});vr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){br.push(t.key),br.length>e.code.length&&br.shift(),br.join("")===e.code&&(br.length=0,Sr(e))}))}(t):Sr(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index fa8663c..78ea6a1 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","getAttribute","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/question_types/calculated_questions.html b/question_types/calculated_questions.html index 02a8e59..2402fa8 100644 --- a/question_types/calculated_questions.html +++ b/question_types/calculated_questions.html @@ -1,153 +1,311 @@
-
-

Question 9

-
Tries remaining: 3
-
Marked out of 1.00
- - v1 (latest) +
+

Question 9

+
Tries remaining: 3
+
Marked out of 1.00
+ -
-
-

Question text

-
-
-

This is an example of a simple calculated question. It's similar to the calculated question but - with fewer settings smile

-

You won a cool Moodle cooler box at a Moodle Moot and wonder how much it will hold. What is the - volume of your cooler box if its height is 6.4 its length is 9.9 and its width is 7.0?

-
-
-
-
-
+ + v1 (latest) +
+
+
+

Question text

+ +
+
+

+ This is an example of a simple calculated question. It's similar to the calculated + question but with fewer settings + smile +

+

+ You won a cool Moodle cooler box at a Moodle Moot and wonder how much it will hold. What + is the volume of your cooler box if its height is 6.4 its length is 9.9 and its width is + 7.0? +

+
+
+
+ +
+
+ +
+
+
-
-

Question 8

-
Tries remaining: 3
-
Marked out of 1.00
- - v2 (latest) +
+

Question 8

+
Tries remaining: 3
+
Marked out of 1.00
+ -
-
-

Question text

-
-
-

This is an example of a calculated multi-choice question. It is like the calculated question in - that the numbers used may vary with each student and question, but the equation remains the same - but it is different from the calculated question in that there is a choice of answers available. -

-

You are making a banner for your organisation's Moodle User Group meeting. Its length is 14 and - its height is 8 What is its area?

-

 

-
+ + v2 (latest) +
+
+
+

Question text

+ +
+
+

+ This is an example of a calculated multi-choice question. It is like the calculated + question in that the numbers used may vary with each student and question, but the + equation remains the same but it is different from the calculated question in that there + is a choice of answers available. +

+

+ You are making a banner for your organisation's Moodle User Group meeting. Its length is + 14 and its height is 8 What is its area? +

+

 

+
+
+
+ + Question 8 Answer + +
+
+ +
+
6
-
- Question 8 - Answer -
-
-
-
6
-
-
-
-
-
112
-
-
-
-
-
22
-
-
-
- -
-
+
+
+ +
+
112
+
+
+
+ +
+
22
+
+
+ +
+
+ +
+
-
-

Question 7

-
Tries remaining: 2
-
Marked out of 1.00
- - v1 (latest) +
+

Question 7

+
Tries remaining: 2
+
Marked out of 1.00
+ -
-
-

Question text

-
-
-

This is an example of a calculated question. The numbers will vary but the formula stays the - same. 

-

You're doing some training in your organisation. In your group you have 3 complete beginners and - 14 relatively experienced Moodle users. How many are there in your group in total?

-

 

-
-
-
-
-
+ -
\ No newline at end of file + v1 (latest) +
+
+
+

Question text

+ +
+
+

+ This is an example of a calculated question. The numbers will vary but the formula stays + the same.  +

+

+ You're doing some training in your organisation. In your group you have 3 complete + beginners and 14 relatively experienced Moodle users. How many are there in your group + in total? +

+

 

+
+
+
+ +
+
+ +
+
+
+
diff --git a/question_types/ordering.html b/question_types/ordering.html new file mode 100644 index 0000000..32479c0 --- /dev/null +++ b/question_types/ordering.html @@ -0,0 +1,821 @@ +
+
+

Question 17

+
Tries remaining: 1
+
Marked out of 1.00
+ + + v4 (latest) +
+
+
+

Question text

+ +
+
+

+ Put this dialogue into the correct order. (This is an example of the Ordering question + type.) +

+
+
+
+
+
    +
  • +
    +
    + +
    +
    + Probably! I travelled from Kenya to Kamchatka! +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Hello John! How are you? +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Really? Why is that? +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Oh you probably have jet lag! +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Well actually I'm a bit tired. +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + I've just been on a long plane journey! +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Fine thanks. And you? +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Fascinating! Tell me all about it. +
    +
    + + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+
+ +
+
+

Question 18

+
Tries remaining: 1
+
Marked out of 1.00
+ + + v4 (latest) +
+
+
+

Question text

+ +
+
+

+ Simply put the numbers in order. This is just an example question to demo the Ordering + question type. +

+
+
+
+
+
    +
  • +
    +
    + +
    +
    + two +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + one +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + three +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + four +
    +
    + + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+
+ +
+
+

Question 19

+
Tries remaining: 1
+
Marked out of 1.00
+ + + v4 (latest) +
+
+
+

Question text

+ +
+
+

+ Order these country  placing the most egalitarian at the top and the most + hierarchical at the bottom. (This is an example of the Ordering question type.) +

+
+
+
+
+
    +
  • +
    +
    + +
    +
    + France +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Sweden +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Nigeria +
    +
    + + +
    +
    +
  • +
  • +
    +
    + +
    +
    + Canada +
    +
    + + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+
diff --git a/src/background/core/code-listener.ts b/src/background/core/code-listener.ts index 1bc5309..ba37ea8 100644 --- a/src/background/core/code-listener.ts +++ b/src/background/core/code-listener.ts @@ -59,7 +59,8 @@ function setUpMoodleGpt(config: Config) { .map(e => `input[type="${e}"]`) .join(','); const inputQuery = - inputTypeQuery + ', textarea, select, [contenteditable], .qtype_essay_editor, .placeinput'; + inputTypeQuery + + ', textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist'; const forms = document.querySelectorAll('.formulation'); // For each form we inject a function on the queqtion diff --git a/src/background/core/modes/autocomplete.ts b/src/background/core/modes/autocomplete.ts index 0ad10d2..59dcbac 100644 --- a/src/background/core/modes/autocomplete.ts +++ b/src/background/core/modes/autocomplete.ts @@ -11,6 +11,7 @@ import handleAtto from 'background/core/questions/atto'; import handleMatch from 'background/core/questions/match'; import handleGapSelect from 'background/core/questions/gapselect'; import handleDragDropText from 'background/core/questions/ddwtos'; +import handleOrdering from 'background/core/questions/ordering'; type Props = { config: Config; @@ -37,6 +38,7 @@ function autoCompleteMode(props: Props) { handleMatch, handleGapSelect, handleDragDropText, + handleOrdering, handleSelect, handleRadio, handleCheckbox diff --git a/src/background/core/parse-question.ts b/src/background/core/parse-question.ts index 0c61847..8f75824 100644 --- a/src/background/core/parse-question.ts +++ b/src/background/core/parse-question.ts @@ -177,5 +177,29 @@ export function parseMoodleQuestion( }; } + if (container.classList.contains('ordering')) { + const itemsContainer = container.querySelector('.sortablelist'); + const orderingItems: { index: number; text: string }[] = []; + if (itemsContainer) { + const items = itemsContainer.querySelectorAll('.sortableitem'); + items.forEach((item, idx) => { + // the textcontent holds the answer string or possibly img alt depending on the question contents + let text = item.textContent?.trim() || ''; + // If it's an image-only answering scenario, text will be empty, grab the alt of first img + if (text === '') { + const img = item.querySelector('img'); + if (img) text = img.getAttribute('alt') || ''; + } + orderingItems.push({ index: idx, text: normalizeText(text) }); + }); + } + + return { + question_type: MoodleQuestionType.ORDERING, + question_text: normalizedQuestionText, + items: orderingItems + }; + } + return null; } diff --git a/src/background/core/questions/ordering.ts b/src/background/core/questions/ordering.ts new file mode 100644 index 0000000..724bc34 --- /dev/null +++ b/src/background/core/questions/ordering.ts @@ -0,0 +1,52 @@ +import type Config from '../../types/config'; +import type GPTAnswer from '../../types/gpt-answer'; +import type { OrderingResponse } from '../../types/question-types'; +import { MoodleQuestionType } from '../../types/question-types'; + +export default function handleOrdering( + config: Config, + inputList: NodeListOf, + gptAnswer: GPTAnswer +): boolean { + if (!gptAnswer.response || gptAnswer.response.question_type !== MoodleQuestionType.ORDERING) + return false; + + const response = gptAnswer.response as OrderingResponse; + + // The sortable list is present within inputList because we added .sortablelist to code-listener.ts + const sortableList = Array.from(inputList).find(el => el.classList.contains('sortablelist')); + if (!sortableList) return true; + + const container = sortableList.closest('.que'); + if (!container) return true; + + const items = Array.from(sortableList.querySelectorAll('li.sortableitem')); + + // Form final array of element IDs to place in hidden input + const correctIdsList: string[] = []; + const orderedItems: HTMLElement[] = []; + + for (const index of response.correct_order.indexes) { + const item = items[index] as HTMLElement; + if (!item) continue; + correctIdsList.push(item.id); + orderedItems.push(item); + } + + // Find the hidden input + const hiddenInput = container.querySelector( + 'input[type="hidden"][name*="_response_"]' + ) as HTMLInputElement; + if (hiddenInput) { + hiddenInput.value = correctIdsList.join(','); + } + + // Visually reorder elements in DOM if mouseover auto-completion is disabled (meaning auto populate directly) + // Even if mouseover is enabled, moodle drag/drop handles are too complex to easily simulate, + // so typically visual repopulation on ordering is acceptable. + orderedItems.forEach(item => { + sortableList.appendChild(item); // appendChild physically moves an already existing dom element + }); + + return true; +} diff --git a/src/background/core/utils/question-schemas.ts b/src/background/core/utils/question-schemas.ts index aa0277c..670b740 100644 --- a/src/background/core/utils/question-schemas.ts +++ b/src/background/core/utils/question-schemas.ts @@ -166,5 +166,28 @@ export const QuestionSchemas: Record = { additionalProperties: false } }, + [MoodleQuestionType.ORDERING]: { + name: 'ordering_response', + strict: true, + schema: { + type: 'object', + properties: { + question_type: { type: 'string', enum: [MoodleQuestionType.ORDERING] }, + correct_order: { + type: 'object', + properties: { + indexes: { + type: 'array', + items: { type: 'integer' } + } + }, + required: ['indexes'], + additionalProperties: false + } + }, + required: ['question_type', 'correct_order'], + additionalProperties: false + } + }, [MoodleQuestionType.UNKNOWN]: undefined }; diff --git a/src/background/types/question-types.ts b/src/background/types/question-types.ts index c858130..c93d5e9 100644 --- a/src/background/types/question-types.ts +++ b/src/background/types/question-types.ts @@ -8,6 +8,7 @@ export enum MoodleQuestionType { MATCH = 'match', SELECT_MISSING_WORD = 'select_missing_word', DRAG_DROP_TEXT = 'drag_drop_text', + ORDERING = 'ordering', UNKNOWN = 'unknown' } @@ -69,6 +70,12 @@ export interface DragDropTextQuery { draggables: { index: number; text: string }[]; } +export interface OrderingQuery { + question_type: MoodleQuestionType.ORDERING; + question_text: string; + items: { index: number; text: string }[]; +} + export type MoodleQuestionQuery = | SingleChoiceQuery | MultipleChoiceQuery @@ -78,7 +85,8 @@ export type MoodleQuestionQuery = | EssayQuery | MatchQuery | SelectMissingWordQuery - | DragDropTextQuery; + | DragDropTextQuery + | OrderingQuery; // ==== Expected LLM Responses ==== @@ -127,6 +135,11 @@ export interface DragDropTextResponse { correct_answers: { blank_index: number; draggable_index: number }[]; } +export interface OrderingResponse { + question_type: MoodleQuestionType.ORDERING; + correct_order: { indexes: number[] }; +} + export type MoodleQuestionResponse = | SingleChoiceResponse | MultipleChoiceResponse @@ -136,4 +149,5 @@ export type MoodleQuestionResponse = | EssayResponse | MatchResponse | SelectMissingWordResponse - | DragDropTextResponse; + | DragDropTextResponse + | OrderingResponse; From 9cab0155b178726fa919d83501b3f20abcf640eb Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sun, 12 Apr 2026 19:20:47 +0200 Subject: [PATCH 05/12] Feat: Add Configurable Timeout, internal Project ID fields, and patch model testing payload --- TODO.md | 20 +++++++- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- extension/popup/index.html | 8 +++ extension/popup/popup.js | 2 +- extension/popup/popup.js.map | 2 +- issues/issues.md | 78 +++++++++++++++++++++++++++++ src/background/core/get-response.ts | 3 +- src/background/types/config.ts | 2 + src/popup/gpt-version.ts | 16 +++++- src/popup/index.ts | 8 +-- 11 files changed, 132 insertions(+), 11 deletions(-) create mode 100644 issues/issues.md diff --git a/TODO.md b/TODO.md index 4640904..7ed5c7c 100644 --- a/TODO.md +++ b/TODO.md @@ -1 +1,19 @@ -# TODO +# MoodleGPT TODO List + +Based on the open GitHub issues, the following features and improvements are planned: + +## Configuration & Settings + +- [x] **Configurable Request Timeout** (#70): Add a setting to manually configure the API request timeout, preventing hangups on deeply nested or slow LLM requests. +- [x] **OpenAI Project ID Support** (#55): Add a field under Advanced Settings to provide an OpenAI `project_id`, enabling compatibility with organizational level API keys. +- [ ] **Toggleable Visual Indications** (#71): Add an option to completely disable the cursor hijack and loading animations to prevent unwanted visual behaviors during strictly proctored quizzes. +- [ ] **Custom LMS Hostname Whitelisting** (#71): Implement internal configuration logic that seamlessly whitelists custom university domains (e.g., `*.oes.kz`) to ensure extension logic runs on rebranded Moodle portals. + +## Context & Advanced AI Integration + +- [ ] **Document Context Injection** (#39, #42): Allow users to upload or attach PDFs/lecture notes to be embedded in the AI's prompt resolution context to strictly enforce the correct syllabus answers. +- [ ] **ChatGPT Assistant Integrations** (#37): Implement support for routing requests to customized pre-trained ChatGPT Assistants using specific Assistant IDs instead of relying entirely on standard ChatCompletion routes. + +## Cross-Platform + +- [ ] **Firefox Port** (#50): Migrate and package the Chrome extension codebase for native Firefox compatibility, adapting to standard `browser.*` APIs. diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index b317d56..8081534 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),2e4),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index 78ea6a1..84541ec 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","contentHandler","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/extension/popup/index.html b/extension/popup/index.html index 3b2c346..9ee617d 100644 --- a/extension/popup/index.html +++ b/extension/popup/index.html @@ -60,10 +60,18 @@
+
+ + +
+
+ + +
diff --git a/extension/popup/popup.js b/extension/popup/popup.js index 6b6c51e..0a580be 100644 --- a/extension/popup/popup.js +++ b/extension/popup/popup.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const l=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class c extends Error{}class u extends c{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:l(t)});const r=t?.error;return 400===e?new p(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class f extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class p extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends c{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends c{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":q(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":q(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",q=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let j;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,l,c,u,h,d,f,p,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,G.encoder,g,"key",f):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(l){const e=m?t:l(t,G.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,G.encoder,g,"value",f))]}return[p?.(t)+"="+p?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&l&&(w=K(w,l)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(c))$=c;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:l,c,u,h,d,f,p,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],l="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const c=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=ce,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(ce))}`)};function he(){}function de(e,t,s){return!t||ce[e]>ce[s]?he:t[e].bind(t)}const fe={error:he,warn:he,info:he,debug:he};let pe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return fe;const n=pe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return pe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new c("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new c("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=le(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new c("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],qe=async(e,t)=>({...e,body:await Me(e.body,t)}),je=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=je.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return je.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let l=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(l=a+"",r.push({start:t.length+o.length,length:l.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":l)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let l;for(;null!==(l=a.exec(i));)r.push({start:l.index,length:l[0].length,error:`Value "${l[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new c(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new c(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),lt.set(this,(()=>{})),ct.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),ft.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,lt,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",pt).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,ct,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,ft,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,ft,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,ct,"f")[e];if(s&&(o(this,ct,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,lt=new WeakMap,ct=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,ft=new WeakMap,st=new WeakSet,pt=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof c)return this._emit("error",e);if(e instanceof Error){const t=new c(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new c(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new c("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,l="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new c("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const f="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(l&&l!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(l)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await i.function(a,this),u=o(this,mt,"m",xt).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:u}),l)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new c("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new c("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,qt=64,jt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?l():"["===e[n]?c():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||jt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},c=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new c("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,l={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new c(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:l,...u}=t,h=t.role;if(!h)throw new c(`missing role for choice ${n}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new c(`missing function_call.arguments for choice ${n}`);if(!l)throw new c(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:l},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return l?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:l.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:l,name:u,...h}=r||{};if(null==i)throw new c(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new c(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new c(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==l)throw new c(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:l}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:l,...c}=e;a?Object.assign(a,c):a=r(this,Ht,{...c,choices:[]});for(const{delta:r,finish_reason:l,index:c,logprobs:u=null,...h}of e.choices){let e=a.choices[c];if(e||(e=a.choices[c]={finish_reason:l,index:c,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(l&&(e.finish_reason=l,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===l)throw new x;if("content_filter"===l)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:f,function_call:p,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),f&&(e.message.refusal=(e.message.refusal||"")+f),m&&(e.message.role=m),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const l=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(l,a),s&&(l.id=s),n&&(l.type=n),r&&(l.function??(l.function={name:r.name??"",arguments:""})),r?.name&&(l.function.name=r.name),r?.arguments&&(l.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),l)&&(l.function.parsed_arguments=Bt(l.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new c(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new c(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class ls extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class cs extends We{create(e,t){return this._client.post("/audio/transcriptions",qe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",qe({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new cs(this._client),this.translations=new us(this._client),this.speech=new ls(this._client)}}hs.Transcriptions=cs,hs.Translations=us,hs.Speech=ls;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class fs extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ps extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new ps(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=ps,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,qs,js,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",qs).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",js).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",qs).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",js).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",qs).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",js).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",qs).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",js).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,qs=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},js=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new fs(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=fs,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,qe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new f({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class ln extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let cn=class extends We{constructor(){super(...arguments),this.permissions=new ln(this._client)}};cn.Permissions=ln;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new cn(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=cn,dn.Alpha=an;class fn extends We{}class pn extends We{constructor(){super(...arguments),this.graderModels=new fn(this._client)}}pn.GraderModels=fn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",qe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",qe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new c(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new c("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new c(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new c(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new c(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new c("stream ended without producing a ChatCompletion");return e}}class qn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class jn extends We{constructor(){super(...arguments),this.inputItems=new qn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}jn.InputItems=qn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,qe({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),l=[...s];const c=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);l.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(c),await this.createAndPoll(e,{file_ids:l})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),l=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),c=parseInt(a,10);if(isNaN(c))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-c>n)throw new $("Webhook timestamp is too old");if(c>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),f=l?`${l}.${a}.${e}`:`${a}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(f)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new pn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new jn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new c("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new c("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const l="warn";this.logLevel=l,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??l,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof c)throw e;throw new c(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new c(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:c}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),p=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,c,g).catch(l),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new f;throw new d({cause:y})}const _=`[${u}${p}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>l(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),l=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,c={signal:n.signal,...l?{duplex:"half"}:{},method:"GET",...i};o&&(c.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,c)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new c(`${e} must be an integer`);if(t<0)throw new c(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:l,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:l,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...j??(j=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=c,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=f,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=p,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=pn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=jn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL");function sr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",sr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t;const s=null===(e=Qn.value)||void 0===e?void 0:e.trim(),n=null===(t=tr.value)||void 0===t?void 0:t.trim();if(s){Yn.innerHTML="";try{const e=new zn({apiKey:s,baseURL:n,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}sr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Yn.value)||void 0===e?void 0:e.trim(),r=null===(t=Qn.value)||void 0===t?void 0:t.trim(),o=null===(s=tr.value)||void 0===s?void 0:s.trim();try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:r,baseURL:o,dangerouslyAllowBrowser:!0});yield e.chat.completions.create({model:n,messages:[{role:"user",content:"reply just pong"}]}),Gn({msg:"The model is valid!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const nr=["includeImages"],rr={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function or(){const s=rr[e.actualMode],n=t.filter((e=>!s.includes(e)&&!nr.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");or()}));const ir="1.1.5",ar=document.querySelector("#version");function lr(e,t=!0){if(t)return void(ar.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,ar.appendChild(s),ar.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),ir))),t=e.split("."),s=ir.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return lr(e,!1);if(parseInt(s[n])>parseInt(t[n]))return lr(ir)}lr(ir)}))}();const cr=document.querySelector("#settings"),ur=document.querySelector("#advanced-settings"),hr=document.querySelector("#switch-settings");hr.addEventListener("click",(function(e){e.preventDefault(),"flex"===ur.style.display?(cr.style.display="flex",ur.style.display="none",hr.textContent="Advanced settings"):(cr.style.display="none",ur.style.display="flex",hr.textContent="Go back to settings")}));const dr=document.querySelector(".save"),fr=["apiKey","code","model","baseURL","maxTokens"];dr.addEventListener("click",(function(){const[s,n,r,o,i]=fr.map((e=>document.querySelector("#"+e).value.trim())),[a,l,c,u,h,d,f,p,m]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,logs:a,title:l,cursor:c,typing:u,mouseover:h,infinite:d,timeout:f,history:p,includeImages:m,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}fr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}or(),sr()}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const l=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class c extends Error{}class u extends c{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:l(t)});const r=t?.error;return 400===e?new p(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class f extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class p extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends c{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends c{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,l,c,u,h,d,f,p,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,G.encoder,g,"key",f):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(l){const e=m?t:l(t,G.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,G.encoder,g,"value",f))]}return[p?.(t)+"="+p?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&l&&(w=K(w,l)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(c))$=c;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:l,c,u,h,d,f,p,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],l="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const c=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=ce,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(ce))}`)};function he(){}function de(e,t,s){return!t||ce[e]>ce[s]?he:t[e].bind(t)}const fe={error:he,warn:he,info:he,debug:he};let pe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return fe;const n=pe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return pe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new c("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new c("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=le(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new c("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let l=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(l=a+"",r.push({start:t.length+o.length,length:l.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":l)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let l;for(;null!==(l=a.exec(i));)r.push({start:l.index,length:l[0].length,error:`Value "${l[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new c(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new c(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),lt.set(this,(()=>{})),ct.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),ft.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,lt,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",pt).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,ct,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,ft,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,ft,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,ct,"f")[e];if(s&&(o(this,ct,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,lt=new WeakMap,ct=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,ft=new WeakMap,st=new WeakSet,pt=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof c)return this._emit("error",e);if(e instanceof Error){const t=new c(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new c(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new c("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,l="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new c("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const f="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(l&&l!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(l)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await i.function(a,this),u=o(this,mt,"m",xt).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:u}),l)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new c("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new c("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?l():"["===e[n]?c():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},c=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new c("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,l={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new c(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:l,...u}=t,h=t.role;if(!h)throw new c(`missing role for choice ${n}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new c(`missing function_call.arguments for choice ${n}`);if(!l)throw new c(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:l},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return l?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:l.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:l,name:u,...h}=r||{};if(null==i)throw new c(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new c(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new c(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==l)throw new c(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:l}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:l,...c}=e;a?Object.assign(a,c):a=r(this,Ht,{...c,choices:[]});for(const{delta:r,finish_reason:l,index:c,logprobs:u=null,...h}of e.choices){let e=a.choices[c];if(e||(e=a.choices[c]={finish_reason:l,index:c,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(l&&(e.finish_reason=l,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===l)throw new x;if("content_filter"===l)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:f,function_call:p,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),f&&(e.message.refusal=(e.message.refusal||"")+f),m&&(e.message.role=m),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const l=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(l,a),s&&(l.id=s),n&&(l.type=n),r&&(l.function??(l.function={name:r.name??"",arguments:""})),r?.name&&(l.function.name=r.name),r?.arguments&&(l.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),l)&&(l.function.parsed_arguments=Bt(l.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new c(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new c(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class ls extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class cs extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new cs(this._client),this.translations=new us(this._client),this.speech=new ls(this._client)}}hs.Transcriptions=cs,hs.Translations=us,hs.Speech=ls;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class fs extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ps extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new ps(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=ps,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new fs(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=fs,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new f({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class ln extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let cn=class extends We{constructor(){super(...arguments),this.permissions=new ln(this._client)}};cn.Permissions=ln;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new cn(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=cn,dn.Alpha=an;class fn extends We{}class pn extends We{constructor(){super(...arguments),this.graderModels=new fn(this._client)}}pn.GraderModels=fn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new c(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new c("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new c(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new c(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new c(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new c("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),l=[...s];const c=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);l.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(c),await this.createAndPoll(e,{file_ids:l})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),l=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),c=parseInt(a,10);if(isNaN(c))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-c>n)throw new $("Webhook timestamp is too old");if(c>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),f=l?`${l}.${a}.${e}`:`${a}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(f)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new pn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new c("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new c("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const l="warn";this.logLevel=l,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??l,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof c)throw e;throw new c(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new c(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:c}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),p=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,c,g).catch(l),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new f;throw new d({cause:y})}const _=`[${u}${p}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>l(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),l=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,c={signal:n.signal,...l?{duplex:"half"}:{},method:"GET",...i};o&&(c.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,c)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new c(`${e} must be an integer`);if(t<0)throw new c(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:l,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:l,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=c,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=f,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=p,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=pn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n;const r=null===(e=Yn.value)||void 0===e?void 0:e.trim(),o=null===(t=Qn.value)||void 0===t?void 0:t.trim(),i=null===(s=tr.value)||void 0===s?void 0:s.trim(),a=null===(n=sr.value)||void 0===n?void 0:n.trim(),l=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:o,baseURL:i,project:a,dangerouslyAllowBrowser:!0});yield e.chat.completions.create({model:r,messages:[{role:"user",content:"reply just pong"}],max_completion_tokens:l||2e3}),Gn({msg:"The model is valid!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const lr="1.1.5",cr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(cr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,cr.appendChild(s),cr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),lr))),t=e.split("."),s=lr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(lr)}ur(lr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),fr=document.querySelector("#switch-settings");fr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",fr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",fr.textContent="Go back to settings")}));const pr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];pr.addEventListener("click",(function(){const[s,n,r,o,i,a,l]=mr.map((e=>document.querySelector("#"+e).value.trim())),[c,u,h,d,f,p,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:l?parseInt(l):void 0,logs:c,title:u,cursor:h,typing:d,mouseover:f,infinite:p,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); //# sourceMappingURL=popup.js.map diff --git a/extension/popup/popup.js.map b/extension/popup/popup.js.map index 87e721b..cfff472 100644 --- a/extension/popup/popup.js.map +++ b/extension/popup/popup.js.map @@ -1 +1 @@ -{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","innerHTML","localeCompare","opt","createElement","appendChild","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","maxTokens","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file +{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","max_completion_tokens","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file diff --git a/issues/issues.md b/issues/issues.md new file mode 100644 index 0000000..1a30b65 --- /dev/null +++ b/issues/issues.md @@ -0,0 +1,78 @@ +[HELP] Add host and desactivate the cursor indication #71 +Help Request + +Issue Summary +Host name change due to private proctoring system integration and unwanted visual behavior in tests. + +Describe the problem +Hello! +Our university is integrating a private proctoring system, and because of this, the host name is changing — it now ends with .oes.kz. +How can we properly add or register this new host in the LMS so that everything continues to work correctly? + +Additionally, we’d like to remove the visual behavior when hovering over a test question. Currently, when you hover, the cursor changes, and when you click, a loading animation appears. Is there a way to disable this effect? + +Environment +• Operating System: Windows 10 +• Browser: Google Chrome +• Version: [e.g. 130.0.6723.70] +• Platform: LMS + +[FEATURE] Add "Request timeout" configuration option #70 +Help Request + +Issue Summary + +[Request was abort.] + +Describe the problem + +[I have no idea what happen maybe request is take too long time.it happen after using gpt 5 mode which not heppen on gpt4 before. can we have timeout setting feature so we can manually set it] + +Environment + + Operating System: [W11] + Browser: [Chrome] + Version: [1.1.5] + Any other relevant information + +Additional Information + +[Any additional information that may be helpful in diagnosing the issue.] + +[FEATURE] Add Project ID under Advanced Settings #55 +Add Project ID under Advanced Settings + +To use organization API keys it is required to provide the project id in the request. I never used openai APIs before and I was getting 401 - Incorrect API key provided. + +I fixed changing this line in MoodleGPT.js : + +project: s = Be("OPENAI_PROJECT_ID") ?? + +and then loading the extension manually. + +It would be very nice to add an optional project id under the advanced settings section. + +[FEATURE] Firefox port? #50 +Feature Request + +Description of the Feature +Would be really good if the extension was available for Firefox too. + +Additional Information +It wouldn't require too much code modification, since Firefox supports chrome. APIs natively too. + +[FEATURE] Preprompt for test with existing documents #42 +Hello, could there be an option to maybe choose a chatgpt chat you have made already or do I need to make a separate API and enter the files in there maybe? + +TLDR: I have specific exams for what correct answers only come from there. For this I would usually make a chatgpt chat that had all the documents pre uploaded in there. But if I want to use the plugin, it takes new chats. Any way to work this in or do I need to generate a specific API for this? + +[FEATURE] Add a document with the extension #39 +Hello, quick question: is it possible to provide my PDF of lecture notes in advance, to prepare and optimise ChatGPT’s answers to the multiple-choice questions? +For example, for my ‘Strategic Communication’ exam, I provide my PDF of about 30 pages of notes, so that the answers are faithful to what we covered in class. +Thanks and have a good day +Leo + +[FEATURE] ChatGPT Assistants #37 +Feature Request + +It would be really helpful if ChatGPT's assistants would also be supported in the extension. It should be only an option to select and use assistants which you have made for a specific topic to give more exact results. diff --git a/src/background/core/get-response.ts b/src/background/core/get-response.ts index 78884d3..ff9b58a 100644 --- a/src/background/core/get-response.ts +++ b/src/background/core/get-response.ts @@ -18,7 +18,7 @@ async function getChatGPTResponse( question: string ): Promise { const controller = new AbortController(); - const timeoutControler = setTimeout(() => controller.abort(), 20 * 1000); + const timeoutControler = setTimeout(() => controller.abort(), (config.timeoutValue || 20) * 1000); // Get the content to send to chatgpt // Including the instructions to the AI, the images as base64 if needed, the question and the past conversation if history is set to true @@ -27,6 +27,7 @@ async function getChatGPTResponse( const client = new OpenAI({ apiKey: config.apiKey, baseURL: config.baseURL, + project: config.projectId, dangerouslyAllowBrowser: true }); diff --git a/src/background/types/config.ts b/src/background/types/config.ts index d829ddf..cef27b4 100644 --- a/src/background/types/config.ts +++ b/src/background/types/config.ts @@ -13,7 +13,9 @@ type Config = { includeImages?: boolean; mode?: 'autocomplete' | 'question-to-answer' | 'clipboard'; baseURL?: string; + projectId?: string; maxTokens?: number; + timeoutValue?: number; }; export default Config; diff --git a/src/popup/gpt-version.ts b/src/popup/gpt-version.ts index 8672a0e..086eb16 100644 --- a/src/popup/gpt-version.ts +++ b/src/popup/gpt-version.ts @@ -6,6 +6,8 @@ const inputModel: HTMLInputElement = document.querySelector('#model')!; const modelsList: HTMLElement = document.querySelector('#models')!; const imagesIntegrationLine: HTMLInputElement = document.querySelector('#includeImages-line')!; const baseURLSelector: HTMLInputElement = document.querySelector('#baseURL')!; +const projectIdSelector: HTMLInputElement = document.querySelector('#projectId')!; +const maxTokensSelector: HTMLInputElement = document.querySelector('#maxTokens')!; /** * Check if the gpt version is at least 4 to show the option 'Include images' */ @@ -24,6 +26,7 @@ inputModel.addEventListener('input', checkCanIncludeImages); export async function populateDatalistWithGptVersions() { const apiKey = apiKeySelector.value?.trim(); const baseURL = baseURLSelector.value?.trim(); + const projectId = projectIdSelector.value?.trim(); if (!apiKey) return; @@ -33,6 +36,7 @@ export async function populateDatalistWithGptVersions() { const client = new OpenAI({ apiKey, baseURL, + project: projectId, dangerouslyAllowBrowser: true }); @@ -66,13 +70,21 @@ export async function checkModel() { const model = inputModel.value?.trim(); const apiKey = apiKeySelector.value?.trim(); const baseURL = baseURLSelector.value?.trim(); + const projectId = projectIdSelector.value?.trim(); + const maxTokens = maxTokensSelector.value ? parseInt(maxTokensSelector.value) : undefined; try { showMessage({ msg: 'Checking GPT version...', isInfinite: true, isError: false }); - const client = new OpenAI({ apiKey, baseURL, dangerouslyAllowBrowser: true }); + const client = new OpenAI({ + apiKey, + baseURL, + project: projectId, + dangerouslyAllowBrowser: true + }); await client.chat.completions.create({ model, - messages: [{ role: 'user', content: 'reply just pong' }] + messages: [{ role: 'user', content: 'reply just pong' }], + max_completion_tokens: maxTokens || 2000 }); showMessage({ msg: 'The model is valid!' }); } catch (err: any) { diff --git a/src/popup/index.ts b/src/popup/index.ts index c50a380..3299b4a 100644 --- a/src/popup/index.ts +++ b/src/popup/index.ts @@ -9,12 +9,12 @@ import { showMessage } from './utils'; const saveBtn = document.querySelector('.save')!; // inputs id -const inputsText = ['apiKey', 'code', 'model', 'baseURL', 'maxTokens']; +const inputsText = ['apiKey', 'code', 'model', 'baseURL', 'maxTokens', 'projectId', 'timeoutValue']; // Save the configuration saveBtn.addEventListener('click', function () { - const [apiKey, code, model, baseURL, maxTokens] = inputsText.map(selector => - (document.querySelector('#' + selector) as HTMLInputElement).value.trim() + const [apiKey, code, model, baseURL, maxTokens, projectId, timeoutValue] = inputsText.map( + selector => (document.querySelector('#' + selector) as HTMLInputElement).value.trim() ); const [logs, title, cursor, typing, mouseover, infinite, timeout, history, includeImages] = inputsCheckbox.map(selector => { @@ -42,6 +42,8 @@ saveBtn.addEventListener('click', function () { model, baseURL, maxTokens: maxTokens ? parseInt(maxTokens) : undefined, + projectId, + timeoutValue: timeoutValue ? parseInt(timeoutValue) : undefined, logs, title, cursor, From c3bc3bbcdd5e9d411a8b482445cb8cde7f21edcc Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 18 Apr 2026 01:39:20 +0200 Subject: [PATCH 06/12] Feat: Discern Essay format types and load initial text templates --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- ..._plain_text.html => essay_plain_text.html} | 0 .../core/get-content-with-history.ts | 2 +- src/background/core/parse-question.ts | 22 +++++++++++++++++-- src/background/types/question-types.ts | 2 ++ 6 files changed, 25 insertions(+), 5 deletions(-) rename question_types/{assay_plain_text.html => essay_plain_text.html} (100%) diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index 8081534..c4d8cd2 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay"))return{question_type:o.ESSAY,question_text:t};if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index 84541ec..c8faebd 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"2FAIA,SAASA,EAAiBC,GACxB,MAAMC,EAAYC,SAASC,MAC3BD,SAASC,MAAQH,EACjBI,YAAW,IAAOF,SAASC,MAAQF,GAAY,IACjD,CC0GO,SAASI,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAQ,KAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,GACJ,CCzEA,SAASO,EAAmBC,EAAcC,GACxC,MAAMC,EAAeF,EAAKG,OAASF,EAAKE,OAASH,EAAKG,OAASF,EAAKE,OACpE,OAAqB,IAAjBD,EAA2B,GACvBA,EAlCV,SAA6BF,EAAcC,GACzC,GAAoB,IAAhBD,EAAKG,OAAc,OAAOF,EAAKE,OACnC,GAAoB,IAAhBF,EAAKE,OAAc,OAAOH,EAAKG,OAEnC,MAAMC,EAAqB,GACrBC,EAAoBL,EAAKM,QAAQ,MAAO,IACxCC,EAAoBN,EAAKK,QAAQ,MAAO,IAE9C,IAAK,IAAIE,EAAI,EAAGA,GAAKH,EAAkBF,SAAUK,EAAG,CAClDJ,EAAOK,KAAK,CAACD,IACb,IAAK,IAAIE,EAAI,EAAGA,GAAKH,EAAkBJ,SAAUO,EAC/CN,EAAOI,GAAGE,GACF,IAANF,EACIE,EACAC,KAAKC,IACHR,EAAOI,EAAI,GAAGE,GAAK,EACnBN,EAAOI,GAAGE,EAAI,GAAK,EACnBN,EAAOI,EAAI,GAAGE,EAAI,IAAML,EAAkBG,EAAI,KAAOD,EAAkBG,EAAI,GAAK,EAAI,GAGhG,CAEA,OAAON,EAAOC,EAAkBF,QAAQI,EAAkBJ,OAC5D,CAWyBU,CAAoBb,EAAMC,IAASC,CAC5D,CAQM,SAAUY,EACdC,EACAC,GAEA,IAAIC,EAA6B,CAC/BC,QAAS,KACTC,WAAY,EACZ7B,MAAO,MAET,IAAK,MAAM8B,KAAOJ,EAAK,CACrB,MAAMG,EAAapB,EAAmBqB,EAAI9B,MAAOyB,GACjD,GAAmB,IAAfI,EACF,MAAO,CAAED,QAASE,EAAIF,QAAS5B,MAAO8B,EAAI9B,MAAO6B,cAE/CA,EAAaF,EAAaE,aAC5BF,EAAe,CAAEC,QAASE,EAAIF,QAAS5B,MAAO8B,EAAI9B,MAAO6B,cAE7D,CACA,OAAOF,CACT,CDwPkD,mBAApBI,iBAAiCA,gBErU/D,MAAMC,EACJ,eAAOC,CAAS/C,GAEdgD,QAAQC,IAAI,mBADA,cACyBjD,EACvC,CAEA,iBAAOkD,CAAWX,EAAgBI,GAEhCK,QAAQC,IACN,sBAFU,eAIV,IAAIV,2BDiGJ,SAAwBI,GAC5B,OAAOR,KAAKgB,MAAmB,IAAbR,EAAmB,KAAO,IAAM,GACpD,CCnG0CS,CAAcT,KAEtD,CAEA,YAAOU,CAAMb,GACXQ,QAAQC,IAAI,cAAeT,EAC7B,CAEA,eAAOc,CAASC,GACdP,QAAQC,IAAI,cAAgBM,EAAUD,UACtCN,QAAQC,IAAI,gBAAkBM,EAAUC,mBAC1C,ECzBF,IAAYC,ECIZ,SAASC,EAAc1D,EAAc2D,GAAuB,GACtDA,IAAa3D,EAAOA,EAAK2D,eAW7B,OATuB3D,EACpB8B,QAAQ,QAAS,MACjBA,QAAQ,cAAe,MACvBA,QAAQ,WAAY,KACpB8B,OAEA9B,QAAQ,iBAAkB,IAC1BA,QAAQ,kBAAmB,KAGhC,CCXA,SAAS+B,EAAeC,EAA8BC,GACpD,MAAMC,EAA0B,GAyBhC,OAxBeF,EAAgBG,iBAAmCF,GAE3DG,SAAQ,CAACC,EAAOC,eAErB,GAAoB,OAAhBD,EAAMrD,MAAgB,OAG1B,IAAId,EAAO,GACX,MAAMqE,EAAUP,EAAgBQ,cAAc,IAAIH,EAAMI,GAAGzC,QAAQ,KAAM,gBAEvE9B,EADEqE,EACwB,QAAnBG,EAAAH,EAAQI,mBAAW,IAAAD,EAAAA,EAAI,GAES,QAAhCE,EAAmB,QAAnBC,EAAAR,EAAMS,qBAAa,IAAAD,OAAA,EAAAA,EAAEF,mBAAW,IAAAC,EAAAA,EAAI,GAG7C1E,EAAO0D,EAAc1D,EAAK8B,QAAQ,kBAAmB,KACjD9B,GACFgE,EAAQ/B,KAAK,CACXmC,QACApE,QAEJ,IAGKgE,CACT,EFjCA,SAAYP,GACVA,EAAA,cAAA,gBACAA,EAAA,gBAAA,kBACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,UAAA,YACAA,EAAA,MAAA,QACAA,EAAA,MAAA,QACAA,EAAA,oBAAA,sBACAA,EAAA,eAAA,iBACAA,EAAA,SAAA,WACAA,EAAA,QAAA,SACD,CAZD,CAAYA,IAAAA,EAAkB,CAAA,IGe9B,MASMoB,EAA6B,CACjCC,KAAM,SACNC,QAXkB,6ZAOlBnB,QAWF,SAAeoB,EACbC,EACAnB,EAEAW,4CAEA,MAAMS,EAAiBpB,EAAgBG,iBAAiB,OAExD,IACGgB,EAAOE,gBCrCZ,SAAqCC,GACnC,MAAMC,EAAgBD,EAAQE,MAAM,aACpC,SAAKD,aAAa,EAAbA,EAAgB,KAGdE,OAAOF,EAAc,KAAO,CACrC,CDgCKG,CAA4BP,EAAOQ,QACV,IAA1BP,EAAevD,OAEf,OAAO8C,EAGT,MAAMiB,EAA+D,GAE/DC,EAAeC,MAAMC,KAAKX,GAAgBY,KAAIC,GE7CtD,SAAuBC,EAAgCC,EAAU,KAC/D,OAAO,IAAIvF,SAAQ,CAACC,EAASC,KAC3B,MAAMsF,EAAShG,SAASiG,cAAc,UAChCC,EAAMF,EAAOG,WAAW,MAE9B,IAAKD,EAGH,OAFAxF,EAAO,2EACPsF,EAAOI,SAIT,MAAMC,EAAM,IAAIC,MAChBD,EAAIE,YAAc,YAClBF,EAAIG,OAAS,KACXR,EAAOS,MAAQJ,EAAII,MACnBT,EAAOU,OAASL,EAAIK,OACpBR,EAAIS,UAAUN,EAAK,EAAG,GAEtB,MAAMO,EAASZ,EAAOa,UAAU,YAAad,GAC7CtF,EAAQmG,GAERZ,EAAOI,QAAQ,EAGjBC,EAAIS,QAAUC,IACZrG,EAAOqG,GACPf,EAAOI,QAAQ,EAGjBC,EAAIW,IAAMlB,EAAakB,GAAG,GAE9B,CFc+DC,CAAcpB,KACrEqB,QAA6B1G,QAAQ2G,WAAW1B,GAEtD,IAAK,MAAMxE,KAAUiG,EACG,cAAlBjG,EAAOmG,OACT5B,EAAkBzD,KAAK,CACrBsF,KAAM,YACNC,UAAW,CAAEC,IAAKtG,EAAOL,SAElBmE,EAAOyC,MAChB1E,QAAQ2E,MAAMxG,EAAOyG,QASzB,OALAlC,EAAkBzD,KAAK,CACrBsF,KAAM,OACNvH,KAAMyE,IAGDiB,CACT,GAAC,CAMD,SAASmC,YACP,MAAMC,EAAY,IAAIC,gBAAgB7H,SAAS8H,SAASC,QAExD,MAAO,CACLC,KAAMhI,SAAS8H,SAASE,KACxBC,KAA2B,UAArBL,EAAUM,IAAI,eAAO,IAAA5D,EAAAA,EAAI,GAC/B6D,QAAiC,UAAxBP,EAAUM,IAAI,kBAAU,IAAAzD,EAAAA,EAAI,GACrC2D,QAAS,GAEb,CAMA,SAASC,UACP,OAAOC,KAAKC,MAAqC,QAA/BjE,EAAAkE,eAAeC,wBAAgB,IAAAnE,EAAAA,EAAI,OACvD,CAQA,SAASoE,EAAuBC,EAAYC,GAC1C,MAAMC,EAAqC,CAAC,OAAQ,OAAQ,WAE5D,IAAK,MAAMC,KAAOD,EAChB,GAAIF,EAAEG,KAASF,EAAEE,GAAM,OAAO,EAGhC,OAAO,CACT,CASA,SAAeC,EACbhE,EACAnB,EACAf,4CAMA,MAAMmG,EDvFF,SACJpF,EACAqF,GAEA,MAAMC,EACJtF,EAAgBuF,QAAQ,SAAWvF,EAAgBuF,QAAQ,iBAAmBvF,EAEhF,GACEsF,EAAUE,UAAUC,SAAS,gBAC7BH,EAAUE,UAAUC,SAAS,mBAC7B,CACA,MAAMC,EAAaJ,EAAUnF,iBAC3B,kCAEIwF,EAASL,EAAUnF,iBAAmC,+BAE5D,GAAIuF,EAAW7H,OAAS,EACtB,MAAO,CACL+H,cAAejG,EAAmBkG,gBAClCC,cAAeT,EACfU,eAAgBhG,EAAeuF,EAA0B,mCAEtD,GAAIK,EAAO9H,OAAS,EACzB,MAAO,CACL+H,cAAejG,EAAmBqG,cAClCF,cAAeT,EACfU,eAAgBhG,EAAeuF,EAA0B,+BAG/D,CAEA,GAAIA,EAAUE,UAAUC,SAAS,aAC/B,MAAO,CACLG,cAAejG,EAAmBsG,WAClCH,cAAeT,GAInB,GAAIC,EAAUE,UAAUC,SAAS,eAC/B,MAAO,CACLG,cAAejG,EAAmBuG,WAClCJ,cAAeT,GAInB,GACEC,EAAUE,UAAUC,SAAS,cAC7BH,EAAUE,UAAUC,SAAS,eAC7BH,EAAUE,UAAUC,SAAS,oBAE7B,MAAO,CACLG,cAAejG,EAAmBwG,UAClCL,cAAeT,GAInB,GAAIC,EAAUE,UAAUC,SAAS,SAC/B,MAAO,CACLG,cAAejG,EAAmByG,MAClCN,cAAeT,GAInB,GAAIC,EAAUE,UAAUC,SAAS,SAAU,CACzC,MAAMY,EAAkD,GAClDC,EAAwD,GAExDC,EAAOjB,EAAUnF,iBAAiB,MACxC,IAAIqG,EAAW,EAsBf,OArBAD,EAAKnG,SAAQqG,IACX,MAAMC,EAAWD,EAAIjG,cAAc,SAC7BmG,EAASF,EAAIjG,cAAc,UACjC,GAAIkG,GAAYC,EAAQ,CAEtB,GADAN,EAAalI,KAAK,CAAEmC,MAAOkG,EAAUtK,KAAM0D,EAAc8G,EAAS/F,aAAe,MAChE,IAAb6F,EAAgB,CAClB,MAAMtG,EAAUyG,EAAOxG,iBAAiB,UACxC,IAAIyG,EAAqB,EACzB9E,MAAMC,KAAK7B,GACR2G,MAAM,GACNzG,SAAQ0G,IACPR,EAAmBnI,KAAK,CACtBmC,MAAOsG,IACP1K,KAAM0D,EAAckH,EAAInG,aAAe,KACvC,GAER,CACA6F,GACF,KAGK,CACLZ,cAAejG,EAAmBoH,MAClCjB,cAAeT,EACf2B,cAAeX,EACfnG,QAASoG,EAEb,CAEA,GAAIhB,EAAUE,UAAUC,SAAS,aAAc,CAC7C,MAAMwB,EAAU3B,EAAUnF,iBAAiB,UACrC+G,EAA6E,GAcnF,OAZAD,EAAQ7G,SAAQ,CAACuG,EAAQQ,KACvB,MAAMjH,EAAUyG,EAAOxG,iBAAiB,UAClCiH,EAA4C,GAClD,IAAIR,EAAqB,EACzB9E,MAAMC,KAAK7B,GACR2G,MAAM,GACNzG,SAAQ0G,IACPM,EAAOjJ,KAAK,CAAEmC,MAAOsG,IAAsB1K,KAAM0D,EAAckH,EAAInG,aAAe,KAAM,IAE5FuG,EAAU/I,KAAK,CAAEmC,MAAO6G,EAAWjH,QAASkH,GAAS,IAGhD,CACLxB,cAAejG,EAAmB0H,oBAClCvB,cAAeT,EACfiC,WAAYJ,EAEhB,CAEA,GAAI5B,EAAUE,UAAUC,SAAS,UAAW,CAC1C,MAAM8B,EAAgBjC,EAAU9E,cAAc,oBACxCgH,EAAgD,GAQtD,OAPID,GACgBA,EAAcpH,iBAAiB,sBACvCC,SAAQ,CAACqH,EAAMC,KACvBF,EAAWrJ,KAAK,CAAEmC,MAAOoH,EAAKxL,KAAM0D,EAAc6H,EAAK9G,aAAe,KAAM,IAIzE,CACLiF,cAAejG,EAAmBgI,eAClC7B,cAAeT,EACfmC,aAEJ,CAEA,GAAIlC,EAAUE,UAAUC,SAAS,YAAa,CAC5C,MAAMmC,EAAiBtC,EAAU9E,cAAc,iBACzCqH,EAAmD,GAezD,OAdID,GACYA,EAAezH,iBAAiB,iBACxCC,SAAQ,CAAC0H,EAAMJ,WAEnB,IAAIxL,GAAuB,QAAhBwE,EAAAoH,EAAKnH,mBAAW,IAAAD,OAAA,EAAAA,EAAEZ,SAAU,GAEvC,GAAa,KAAT5D,EAAa,CACf,MAAMuG,EAAMqF,EAAKtH,cAAc,OAC3BiC,IAAKvG,EAAOuG,EAAIsF,aAAa,QAAU,GAC7C,CACAF,EAAc1J,KAAK,CAAEmC,MAAOoH,EAAKxL,KAAM0D,EAAc1D,IAAQ,IAI1D,CACL0J,cAAejG,EAAmBqI,SAClClC,cAAeT,EACf4C,MAAOJ,EAEX,CAEA,OAAO,IACT,CC5EsBK,CAAoBlI,EAAiBf,GACnD0B,EAAcyE,EAAcV,KAAKyD,UAAU/C,EAAa,KAAM,GAAKnG,EAGnEmJ,EAAsC,CAAEpH,KAAM,OAAQC,cADtCC,EAAWC,EAAQnB,EAAiBW,IAGpD0H,EAAeC,IACnB,MAAMC,EAAa,CAAE/D,QAAS8D,GAC9B,MAAO,CACLE,SAAU,CAACzH,KAA+BuH,EAAYF,GAItDK,MAAOrD,EACP,YAAAsD,CAAalJ,GACX,GAAI2B,EAAOqD,QAAS,CAKlB,IAAImE,EAJJJ,EAAW/D,QAAQrG,KAAKiK,GACxBG,EAAW/D,QAAQrG,KAAK,CAAE6C,KAAM,YAAaC,QAASzB,IAItD,MAAMoJ,EAA8BnE,IAC9BoE,EAAsB9E,IAI1B4E,EAHkB,OAAhBC,GAAyB9D,EAAuB8D,EAAaC,GAG/CD,EAFAC,EAIlBF,EAAcnE,QAAU+D,EAAW/D,QACnCI,eAAeC,iBAAmBH,KAAKyD,UAAUQ,EACnD,CACF,EACD,EAGH,IAAKxH,EAAOqD,QACV,OAAO6D,EAAY,IAGrB,MAAMO,EAA8BnE,IAC9BoE,EAAsB9E,IAC5B,OAAoB,OAAhB6E,GAAyB9D,EAAuB8D,EAAaC,GAGxDR,EAAYO,EAAYpE,SAFxB6D,EAAYQ,EAAWrE,QAIlC,GAAC,CG9KD,SAASsE,EAAuBC,EAAUC,EAAOhM,EAAOiM,EAAMC,GAK1D,GAAqB,mBAAVF,IAAmDA,EAAMG,IAAIJ,GACpE,MAAM,IAAIK,UAAU,2EACxB,OAAwEJ,EAAMK,IAAIN,EAAU/L,GAAQA,CACxG,CACA,SAASsM,EAAuBP,EAAUC,EAAOC,EAAMC,GACnD,GAAa,MAATD,IAAiBC,EACjB,MAAM,IAAIE,UAAU,iDACxB,GAAqB,mBAAVJ,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMG,IAAIJ,GACpE,MAAM,IAAIK,UAAU,4EACxB,MAAgB,MAATH,EAAeC,EAAa,MAATD,EAAeC,EAAEK,KAAKR,GAAYG,EAAIA,EAAElM,MAAQgM,EAAM1E,IAAIyE,EACxF,CCXO,IAAIS,EAAQ,WACf,MAAMC,OAAEA,GAAWC,WACnB,GAAID,GAAQE,WAER,OADAH,EAAQC,EAAOE,WAAWC,KAAKH,GACxBA,EAAOE,aAElB,MAAME,EAAK,IAAIC,WAAW,GACpBC,EAAaN,EAAS,IAAMA,EAAOO,gBAAgBH,GAAI,GAAK,IAAuB,IAAhBxL,KAAK4L,SAAmB,IACjG,MAAO,uCAAuCjM,QAAQ,UAAWkM,KAAQA,EAAKH,IAAgB,KAAQG,EAAI,GAAMC,SAAS,KAC7H,ECZO,SAASC,EAAajH,GACzB,MAAuB,iBAARA,GACH,OAARA,IAEE,SAAUA,GAAoB,eAAbA,EAAIkH,MAElB,YAAalH,GAAOmH,OAAOnH,EAAIiF,SAASmC,SAAS,iCAC9D,CACO,MAAMC,EAAerH,IACxB,GAAIA,aAAesH,MACf,OAAOtH,EACX,GAAmB,iBAARA,GAA4B,OAARA,EAAc,CACzC,IACI,GAA4C,mBAAxCuH,OAAOC,UAAUR,SAASZ,KAAKpG,GAA2B,CAE1D,MAAMU,EAAQ,IAAI4G,MAAMtH,EAAIiF,QAASjF,EAAIyH,MAAQ,CAAEA,MAAOzH,EAAIyH,OAAU,CAAA,GAQxE,OAPIzH,EAAI0H,QACJhH,EAAMgH,MAAQ1H,EAAI0H,OAElB1H,EAAIyH,QAAU/G,EAAM+G,QACpB/G,EAAM+G,MAAQzH,EAAIyH,OAClBzH,EAAIkH,OACJxG,EAAMwG,KAAOlH,EAAIkH,MACdxG,CACX,CACJ,CACA,MAAQ,CACR,IACI,OAAO,IAAI4G,MAAM/F,KAAKyD,UAAUhF,GACpC,CACA,MAAQ,CACZ,CACA,OAAO,IAAIsH,MAAMtH,EAAI,EC/BlB,MAAM2H,UAAoBL,OAE1B,MAAMM,UAAiBD,EAC1B,WAAAE,CAAYxH,EAAQK,EAAOuE,EAAS6C,GAChCC,MAAM,GAAGH,EAASI,YAAY3H,EAAQK,EAAOuE,MAC7CgD,KAAK5H,OAASA,EACd4H,KAAKH,QAAUA,EACfG,KAAKC,UAAYJ,GAAS3G,IAAI,gBAC9B8G,KAAKvH,MAAQA,EACb,MAAMyH,EAAOzH,EACbuH,KAAKG,KAAOD,GAAa,KACzBF,KAAKI,MAAQF,GAAc,MAC3BF,KAAK3H,KAAO6H,GAAa,IAC7B,CACA,kBAAOH,CAAY3H,EAAQK,EAAOuE,GAC9B,MAAMqD,EAAM5H,GAAOuE,QACU,iBAAlBvE,EAAMuE,QACTvE,EAAMuE,QACJ1D,KAAKyD,UAAUtE,EAAMuE,SACzBvE,EAAQa,KAAKyD,UAAUtE,GACnBuE,EACV,OAAI5E,GAAUiI,EACH,GAAGjI,KAAUiI,IAEpBjI,EACO,GAAGA,0BAEViI,GAGG,0BACX,CACA,eAAOC,CAASlI,EAAQmI,EAAevD,EAAS6C,GAC5C,IAAKzH,IAAWyH,EACZ,OAAO,IAAIW,EAAmB,CAAExD,UAASwC,MAAOJ,EAAYmB,KAEhE,MAAM9H,EAAQ8H,GAAuB,MACrC,OAAe,MAAXnI,EACO,IAAIqI,EAAgBrI,EAAQK,EAAOuE,EAAS6C,GAExC,MAAXzH,EACO,IAAIsI,EAAoBtI,EAAQK,EAAOuE,EAAS6C,GAE5C,MAAXzH,EACO,IAAIuI,EAAsBvI,EAAQK,EAAOuE,EAAS6C,GAE9C,MAAXzH,EACO,IAAIwI,EAAcxI,EAAQK,EAAOuE,EAAS6C,GAEtC,MAAXzH,EACO,IAAIyI,EAAczI,EAAQK,EAAOuE,EAAS6C,GAEtC,MAAXzH,EACO,IAAI0I,EAAyB1I,EAAQK,EAAOuE,EAAS6C,GAEjD,MAAXzH,EACO,IAAI2I,EAAe3I,EAAQK,EAAOuE,EAAS6C,GAElDzH,GAAU,IACH,IAAI4I,EAAoB5I,EAAQK,EAAOuE,EAAS6C,GAEpD,IAAIF,EAASvH,EAAQK,EAAOuE,EAAS6C,EAChD,EAEG,MAAMoB,UAA0BtB,EACnC,WAAAC,EAAY5C,QAAEA,GAAY,IACtB8C,WAAMoB,OAAWA,EAAWlE,GAAW,4BAAwBkE,EACnE,EAEG,MAAMV,UAA2Bb,EACpC,WAAAC,EAAY5C,QAAEA,EAAOwC,MAAEA,IACnBM,WAAMoB,OAAWA,EAAWlE,GAAW,yBAAqBkE,GAGxD1B,IACAQ,KAAKR,MAAQA,EACrB,EAEG,MAAM2B,UAAkCX,EAC3C,WAAAZ,EAAY5C,QAAEA,GAAY,IACtB8C,MAAM,CAAE9C,QAASA,GAAW,sBAChC,EAEG,MAAMyD,UAAwBd,GAE9B,MAAMe,UAA4Bf,GAElC,MAAMgB,UAA8BhB,GAEpC,MAAMiB,UAAsBjB,GAE5B,MAAMkB,UAAsBlB,GAE5B,MAAMmB,UAAiCnB,GAEvC,MAAMoB,UAAuBpB,GAE7B,MAAMqB,UAA4BrB,GAElC,MAAMyB,UAAgC1B,EACzC,WAAAE,GACIE,MAAM,mEACV,EAEG,MAAMuB,UAAuC3B,EAChD,WAAAE,GACIE,MAAM,qFACV,EAEG,MAAMwB,UAAqCjC,MAC9C,WAAAO,CAAY5C,GACR8C,MAAM9C,EACV,EC/GJ,MAAMuE,EAAyB,uBAIxB,IAAIC,EAAWC,IAAUD,EAAU9K,MAAM8K,QAAUA,EAAQC,IACvDC,EAAkBF,EAEtB,SAASG,EAASC,GACrB,MAAiB,iBAANA,EACA,CAAA,EAEJA,GAAK,CAAA,CAChB,CAaO,SAASC,EAAMnO,GAClB,OAAc,MAAPA,GAA8B,iBAARA,IAAqBgD,MAAM8K,QAAQ9N,EACpE,CAOO,MCpCMoO,EAASC,GAAO,IAAIvQ,SAASC,GAAYP,WAAWO,EAASsQ,KCD7DC,EAAU,SC0BvB,MAAMC,EAAwB,KAC1B,MAAMC,EAZc,oBAATC,MAAsC,MAAdA,KAAKC,MAC7B,OAEgB,oBAAhBC,YACA,OAEgG,qBAAvG/C,OAAOC,UAAUR,SAASZ,UAAmC,IAAvBG,WAAWgE,QAA0BhE,WAAWgE,QAAU,GACzF,OAEJ,UAIP,GAAyB,SAArBJ,EACA,MAAO,CACH,mBAAoB,KACpB,8BAA+BF,EAC/B,iBAAkBO,EAAkBJ,KAAKC,MAAMI,IAC/C,mBAAoBC,EAAcN,KAAKC,MAAMM,MAC7C,sBAAuB,OACvB,8BAAuD,iBAAjBP,KAAKjM,QAAuBiM,KAAKjM,QAAUiM,KAAKjM,SAASyM,MAAQ,WAG/G,GAA2B,oBAAhBN,YACP,MAAO,CACH,mBAAoB,KACpB,8BAA+BL,EAC/B,iBAAkB,UAClB,mBAAoB,SAASK,cAC7B,sBAAuB,OACvB,8BAA+B/D,WAAWgE,QAAQpM,SAI1D,GAAyB,SAArBgM,EACA,MAAO,CACH,mBAAoB,KACpB,8BAA+BF,EAC/B,iBAAkBO,EAAkBjE,WAAWgE,QAAQM,UAAY,WACnE,mBAAoBH,EAAcnE,WAAWgE,QAAQI,MAAQ,WAC7D,sBAAuB,OACvB,8BAA+BpE,WAAWgE,QAAQpM,SAAW,WAGrE,MAAM2M,EAsBV,WACI,GAAyB,oBAAdC,YAA8BA,UACrC,OAAO,KAGX,MAAMC,EAAkB,CACpB,CAAEjJ,IAAK,OAAQkJ,QAAS,wCACxB,CAAElJ,IAAK,KAAMkJ,QAAS,wCACtB,CAAElJ,IAAK,KAAMkJ,QAAS,8CACtB,CAAElJ,IAAK,SAAUkJ,QAAS,0CAC1B,CAAElJ,IAAK,UAAWkJ,QAAS,2CAC3B,CAAElJ,IAAK,SAAUkJ,QAAS,sEAG9B,IAAK,MAAMlJ,IAAEA,EAAGkJ,QAAEA,KAAaD,EAAiB,CAC5C,MAAM3M,EAAQ4M,EAAQC,KAAKH,UAAUI,WACrC,GAAI9M,EAAO,CAIP,MAAO,CAAE+M,QAASrJ,EAAK5D,QAAS,GAHlBE,EAAM,IAAM,KACZA,EAAM,IAAM,KACZA,EAAM,IAAM,IAE9B,CACJ,CACA,OAAO,IACX,CA9CwBgN,GACpB,OAAIP,EACO,CACH,mBAAoB,KACpB,8BAA+Bb,EAC/B,iBAAkB,UAClB,mBAAoB,UACpB,sBAAuB,WAAWa,EAAYM,UAC9C,8BAA+BN,EAAY3M,SAI5C,CACH,mBAAoB,KACpB,8BAA+B8L,EAC/B,iBAAkB,UAClB,mBAAoB,UACpB,sBAAuB,UACvB,8BAA+B,UAClC,EA4BL,MAAMS,EAAiBC,GAKN,QAATA,EACO,MACE,WAATA,GAA8B,QAATA,EACd,MACE,QAATA,EACO,MACE,YAATA,GAA+B,UAATA,EACf,QACPA,EACO,SAASA,IACb,UAELH,EAAqBK,IAMvBA,EAAWA,EAASnO,eAKP0K,SAAS,OACX,MACM,YAAbyD,EACO,UACM,WAAbA,EACO,QACM,UAAbA,EACO,UACM,YAAbA,EACO,UACM,YAAbA,EACO,UACM,UAAbA,EACO,QACPA,EACO,SAASA,IACb,UAEX,IAAIS,ECjJG,SAASC,KAAsBC,GAClC,MAAMC,EAAiBlF,WAAWkF,eAClC,QAA8B,IAAnBA,EAGP,MAAM,IAAInE,MAAM,2HAEpB,OAAO,IAAImE,KAAkBD,EACjC,CACO,SAASE,EAAmBC,GAC/B,IAAIC,EAAOC,OAAOC,iBAAiBH,EAAWA,EAASE,OAAOC,iBAAmBH,EAASE,OAAOE,YACjG,OAAOR,EAAmB,CACtB,KAAAS,GAAU,EACV,UAAMC,CAAKC,GACP,MAAM/R,KAAEA,EAAIN,MAAEA,SAAgB+R,EAAK7R,OAC/BI,EACA+R,EAAWC,QAGXD,EAAWE,QAAQvS,EAE3B,EACA,YAAMwS,SACIT,EAAKU,WACf,GAER,CAOO,SAASC,EAA8BC,GAC1C,GAAIA,EAAOX,OAAOC,eACd,OAAOU,EACX,MAAMC,EAASD,EAAOE,YACtB,MAAO,CACH,UAAM3S,GACF,IACI,MAAMG,QAAeuS,EAAOE,OAG5B,OAFIzS,GAAQC,MACRsS,EAAOG,cACJ1S,CACX,CACA,MAAOF,GAEH,MADAyS,EAAOG,cACD5S,CACV,CACJ,EACA,YAAM,GACF,MAAM6S,EAAgBJ,EAAOJ,SAG7B,OAFAI,EAAOG,oBACDC,EACC,CAAE1S,MAAM,EAAMN,WAAOsP,EAChC,EACA,CAAC0C,OAAOC,iBACJ,OAAO7D,IACX,EAER,CClEO,MAAM6E,EAAkB,EAAGhF,UAASiF,WAChC,CACHC,YAAa,CACT,eAAgB,oBAEpBD,KAAMxL,KAAKyD,UAAU+H,KCNhBE,EAAiB,UACjBC,EAAqBC,GAAMhG,OAAOgG,GAClCC,EAAa,CACtBC,QAAUF,GAAMhG,OAAOgG,GAAGtS,QAAQ,OAAQ,KAC1CyS,QAASJ,GCFN,IAAIlH,EAAM,CAACrK,EAAKoG,KAAUiE,EAAMuB,OAAOgG,QAAUC,SAAShG,UAAUpB,KAAKK,KAAKc,OAAOC,UAAUiG,gBAClGzH,EAAIrK,EAAKoG,IACb,MAAM2L,GAA4B,MAC9B,MAAMtR,EAAQ,GACd,IAAK,IAAIrB,EAAI,EAAGA,EAAI,MAAOA,EACvBqB,EAAMpB,KAAK,MAAQD,EAAI,GAAK,IAAM,IAAMA,EAAEiM,SAAS,KAAK2G,eAE5D,OAAOvR,CACV,EANiC,GA4G5BwR,GAAQ,KA8FP,SAASC,GAAUnE,EAAKoE,GAC3B,GAAIrE,EAAQC,GAAM,CACd,MAAMqE,EAAS,GACf,IAAK,IAAIhT,EAAI,EAAGA,EAAI2O,EAAIhP,OAAQK,GAAK,EACjCgT,EAAO/S,KAAK8S,EAAGpE,EAAI3O,KAEvB,OAAOgT,CACX,CACA,OAAOD,EAAGpE,EACd,CCpNA,MAAMsE,GAA0B,CAC5BC,SAASC,GACE/G,OAAO+G,GAAU,KAE5BC,MAAO,QACPC,QAAO,CAACF,EAAQnM,IACLoF,OAAO+G,GAAU,IAAMnM,EAAM,IAExCsM,OAAOH,GACI/G,OAAO+G,IAGhBI,GAAgB,SAAU/S,EAAKgT,GACjC5P,MAAM6I,UAAUxM,KAAKX,MAAMkB,EAAKkO,EAAQ8E,GAAkBA,EAAiB,CAACA,GAChF,EACA,IAAIC,GACJ,MAAMC,GAAW,CACbC,gBAAgB,EAChBC,WAAW,EACXC,kBAAkB,EAClBC,YAAa,UACbC,QAAS,QACTC,iBAAiB,EACjBC,UAAW,IACXC,QAAQ,EACRC,iBAAiB,EACjBC,QDoFkB,CAACC,EAAKC,EAAiBP,EAASQ,EAAOC,KAGzD,GAAmB,IAAfH,EAAI1U,OACJ,OAAO0U,EAEX,IAAII,EAASJ,EAOb,GANmB,iBAARA,EACPI,EAAS3D,OAAOrE,UAAUR,SAASZ,KAAKgJ,GAEpB,iBAARA,IACZI,EAASrI,OAAOiI,IAEJ,eAAZN,EACA,OAAOW,OAAOD,GAAQ3U,QAAQ,mBAAmB,SAAU6U,GACvD,MAAO,SAAWC,SAASD,EAAGhM,MAAM,GAAI,IAAM,KAClD,IAEJ,IAAIkM,EAAM,GACV,IAAK,IAAI3U,EAAI,EAAGA,EAAIuU,EAAO9U,OAAQO,GAAK2S,GAAO,CAC3C,MAAMiC,EAAUL,EAAO9U,QAAUkT,GAAQ4B,EAAO9L,MAAMzI,EAAGA,EAAI2S,IAAS4B,EAChEjU,EAAM,GACZ,IAAK,IAAIR,EAAI,EAAGA,EAAI8U,EAAQnV,SAAUK,EAAG,CACrC,IAAIgM,EAAI8I,EAAQC,WAAW/U,GACjB,KAANgM,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACCA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,KDzIZ,YC0INwI,IAA6B,KAANxI,GAAoB,KAANA,GAEtCxL,EAAIA,EAAIb,QAAUmV,EAAQE,OAAOhV,GAGjCgM,EAAI,IACJxL,EAAIA,EAAIb,QAAUgT,GAAU3G,GAG5BA,EAAI,KACJxL,EAAIA,EAAIb,QAAUgT,GAAU,IAAQ3G,GAAK,GAAM2G,GAAU,IAAY,GAAJ3G,GAGjEA,EAAI,OAAUA,GAAK,MACnBxL,EAAIA,EAAIb,QACJgT,GAAU,IAAQ3G,GAAK,IAAO2G,GAAU,IAAS3G,GAAK,EAAK,IAAS2G,GAAU,IAAY,GAAJ3G,IAG9FhM,GAAK,EACLgM,EAAI,QAAiB,KAAJA,IAAc,GAA+B,KAAxB8I,EAAQC,WAAW/U,IACzDQ,EAAIA,EAAIb,QACJgT,GAAU,IAAQ3G,GAAK,IACnB2G,GAAU,IAAS3G,GAAK,GAAM,IAC9B2G,GAAU,IAAS3G,GAAK,EAAK,IAC7B2G,GAAU,IAAY,GAAJ3G,GAC9B,CACA6I,GAAOrU,EAAIyU,KAAK,GACpB,CACA,OAAOJ,CAAG,EC9IVK,kBAAkB,EAClBV,OAAQtC,EACRiD,UAAWhD,EAEXkB,SAAS,EACT+B,cAAcC,IACF5B,KAAgBA,GAAchB,SAAShG,UAAUpB,KAAKK,KAAK4J,KAAK7I,UAAUgH,eAAe4B,GAErGE,WAAW,EACXC,oBAAoB,GASxB,MAAMC,GAAW,CAAA,EACjB,SAASC,GAAgBC,EAAQxC,EAAQyC,EAAqBC,EAAgBhC,EAAkB2B,EAAoBD,EAAWpB,EAAiBC,EAAS0B,EAAQC,EAAMnC,EAAWwB,EAAeZ,EAAQW,EAAWD,EAAkBnB,EAASiC,GAC3O,IAAIpV,EAAM+U,EACNM,EAASD,EACTjX,EAAO,EACPmX,GAAY,EAChB,UAA2C,KAAnCD,EAASA,EAAO7P,IAAIqP,OAAkCS,GAAW,CAErE,MAAMC,EAAMF,EAAO7P,IAAIuP,GAEvB,GADA5W,GAAQ,OACW,IAARoX,EAAqB,CAC5B,GAAIA,IAAQpX,EACR,MAAM,IAAIqX,WAAW,uBAGrBF,GAAY,CAEpB,MACoC,IAAzBD,EAAO7P,IAAIqP,MAClB1W,EAAO,EAEf,CAeA,GAdsB,mBAAX+W,EACPlV,EAAMkV,EAAO3C,EAAQvS,GAEhBA,aAAe0U,KACpB1U,EAAMwU,IAAgBxU,GAEO,UAAxBgV,GAAmClH,EAAQ9N,KAChDA,EAAMkS,GAAUlS,GAAK,SAAU9B,GAC3B,OAAIA,aAAiBwW,KACVF,IAAgBtW,GAEpBA,CACX,KAEQ,OAAR8B,EAAc,CACd,GAAI4U,EACA,OAAOpB,IAAYc,EAEfd,EAAQjB,EAAQO,GAASU,QAASL,EAAS,MAAOS,GAChDrB,EAEVvS,EAAM,EACV,CACA,GAnDqB,iBADSwR,EAoDDxR,IAlDZ,iBAANwR,GACM,kBAANA,GACM,iBAANA,GACM,iBAANA,GDuJR,SAAmBxR,GACtB,SAAKA,GAAsB,iBAARA,KAGTA,EAAIkM,aAAelM,EAAIkM,YAAYuJ,UAAYzV,EAAIkM,YAAYuJ,SAASzV,IACtF,CC7GyC0V,CAAU1V,GAAM,CACjD,GAAIwT,EAAS,CACT,MAAMmC,EAAYrB,EAAmB/B,EAE/BiB,EAAQjB,EAAQO,GAASU,QAASL,EAAS,MAAOS,GACxD,MAAO,CACHW,IAAYoB,GACR,IAEApB,IAAYf,EAAQxT,EAAK8S,GAASU,QAASL,EAAS,QAASS,IAEzE,CACA,MAAO,CAACW,IAAYhC,GAAU,IAAMgC,IAAY/I,OAAOxL,IAC3D,CAjEJ,IAAkCwR,EAkE9B,MAAMoE,EAAS,GACf,QAAmB,IAAR5V,EACP,OAAO4V,EAEX,IAAIC,EACJ,GAA4B,UAAxBb,GAAmClH,EAAQ9N,GAEvCsU,GAAoBd,IAEpBxT,EAAMkS,GAAUlS,EAAKwT,IAEzBqC,EAAW,CAAC,CAAE3X,MAAO8B,EAAIjB,OAAS,EAAIiB,EAAIqU,KAAK,MAAQ,UAAO,SAE7D,GAAIvG,EAAQoH,GACbW,EAAWX,MAEV,CACD,MAAMY,EAAOlK,OAAOkK,KAAK9V,GACzB6V,EAAWV,EAAOW,EAAKX,KAAKA,GAAQW,CACxC,CACA,MAAMC,EAAiBxC,EAAkB/H,OAAO+G,GAAQrT,QAAQ,MAAO,OAASsM,OAAO+G,GACjFyD,EAAkBf,GAAkBnH,EAAQ9N,IAAuB,IAAfA,EAAIjB,OAAegX,EAAiB,KAAOA,EACrG,GAAI9C,GAAoBnF,EAAQ9N,IAAuB,IAAfA,EAAIjB,OACxC,OAAOiX,EAAkB,KAE7B,IAAK,IAAI1W,EAAI,EAAGA,EAAIuW,EAAS9W,SAAUO,EAAG,CACtC,MAAM8G,EAAMyP,EAASvW,GACfpB,EAES,iBAARkI,QAAyC,IAAdA,EAAIlI,MAAwBkI,EAAIlI,MAAQ8B,EAAIoG,GAC9E,GAAIuO,GAAuB,OAAVzW,EACb,SAGJ,MAAM+X,EAAcjD,GAAaO,EAAkBnN,EAAIlH,QAAQ,MAAO,OAASkH,EACzE8P,EAAapI,EAAQ9N,GACQ,mBAAxBgV,EACHA,EAAoBgB,EAAiBC,GACnCD,EACJA,GAAmBhD,EAAY,IAAMiD,EAAc,IAAMA,EAAc,KAC7Eb,EAAY7K,IAAIwK,EAAQ5W,GACxB,MAAMgY,EAAmB,IAAIC,QAC7BD,EAAiB5L,IAAIsK,GAAUO,GAC/BzC,GAAciD,EAAQd,GAAgB5W,EAAOgY,EAAYlB,EAAqBC,EAAgBhC,EAAkB2B,EAAoBD,EAAWpB,EAEvH,UAAxByB,GAAmCV,GAAoBxG,EAAQ9N,GAAO,KAAOwT,EAAS0B,EAAQC,EAAMnC,EAAWwB,EAAeZ,EAAQW,EAAWD,EAAkBnB,EAASgD,GAChL,CACA,OAAOP,CACX,CAqEO,SAASvM,GAAU0L,EAAQsB,EAAO,IACrC,IAAIrW,EAAM+U,EACV,MAAM3T,EAtEV,SAAqCiV,EAAOvD,IACxC,QAAqC,IAA1BuD,EAAKpD,kBAAqE,kBAA1BoD,EAAKpD,iBAC5D,MAAM,IAAI3I,UAAU,0EAExB,QAAoC,IAAzB+L,EAAK9C,iBAAmE,kBAAzB8C,EAAK9C,gBAC3D,MAAM,IAAIjJ,UAAU,yEAExB,GAAqB,OAAjB+L,EAAK7C,cAA4C,IAAjB6C,EAAK7C,SAAmD,mBAAjB6C,EAAK7C,QAC5E,MAAM,IAAIlJ,UAAU,iCAExB,MAAM6I,EAAUkD,EAAKlD,SAAWL,GAASK,QACzC,QAA4B,IAAjBkD,EAAKlD,SAA4C,UAAjBkD,EAAKlD,SAAwC,eAAjBkD,EAAKlD,QACxE,MAAM,IAAI7I,UAAU,qEAExB,IAAIsJ,EAAStC,EACb,QAA2B,IAAhB+E,EAAKzC,OAAwB,CACpC,IAAKvJ,EAAIoH,EAAY4E,EAAKzC,QACtB,MAAM,IAAItJ,UAAU,mCAExBsJ,EAASyC,EAAKzC,MAClB,CACA,MAAMW,EAAY9C,EAAWmC,GAC7B,IAIIV,EAJAgC,EAASpC,GAASoC,OActB,IAb2B,mBAAhBmB,EAAKnB,QAAyBpH,EAAQuI,EAAKnB,WAClDA,EAASmB,EAAKnB,QAIdhC,EADAmD,EAAKnD,aAAemD,EAAKnD,eAAeb,GAC1BgE,EAAKnD,YAEd,YAAamD,EACJA,EAAK5D,QAAU,UAAY,SAG3BK,GAASI,YAEvB,mBAAoBmD,GAAuC,kBAAxBA,EAAKpB,eACxC,MAAM,IAAI3K,UAAU,iDAExB,MAAM0I,OAAsC,IAAnBqD,EAAKrD,UACC,KAAzBqD,EAAK9C,iBAEDT,GAASE,YACXqD,EAAKrD,UACb,MAAO,CACHD,eAA+C,kBAAxBsD,EAAKtD,eAA+BsD,EAAKtD,eAAiBD,GAASC,eAE1FC,UAAWA,EACXC,iBAAmD,kBAA1BoD,EAAKpD,mBAAmCoD,EAAKpD,iBAAmBH,GAASG,iBAClGC,YAAaA,EACbC,QAASA,EACTC,gBAAiD,kBAAzBiD,EAAKjD,gBAAgCiD,EAAKjD,gBAAkBN,GAASM,gBAC7F6B,iBAAkBoB,EAAKpB,eACvB5B,eAAqC,IAAnBgD,EAAKhD,UAA4BP,GAASO,UAAYgD,EAAKhD,UAC7EC,OAA+B,kBAAhB+C,EAAK/C,OAAuB+C,EAAK/C,OAASR,GAASQ,OAClEC,gBAAiD,kBAAzB8C,EAAK9C,gBAAgC8C,EAAK9C,gBAAkBT,GAASS,gBAC7FC,QAAiC,mBAAjB6C,EAAK7C,QAAyB6C,EAAK7C,QAAUV,GAASU,QACtEc,iBAAmD,kBAA1B+B,EAAK/B,iBAAiC+B,EAAK/B,iBAAmBxB,GAASwB,iBAChGY,OAAQA,EACRtB,OAAQA,EACRW,UAAWA,EACXC,cAA6C,mBAAvB6B,EAAK7B,cAA+B6B,EAAK7B,cAAgB1B,GAAS0B,cACxFG,UAAqC,kBAAnB0B,EAAK1B,UAA0B0B,EAAK1B,UAAY7B,GAAS6B,UAE3EQ,KAA2B,mBAAdkB,EAAKlB,KAAsBkB,EAAKlB,KAAO,KACpDP,mBAAuD,kBAA5ByB,EAAKzB,mBAAmCyB,EAAKzB,mBAAqB9B,GAAS8B,mBAE9G,CAGoB0B,CAA4BD,GAC5C,IAAIR,EACAX,EAC0B,mBAAnB9T,EAAQ8T,QACfA,EAAS9T,EAAQ8T,OACjBlV,EAAMkV,EAAO,GAAIlV,IAEZ8N,EAAQ1M,EAAQ8T,UACrBA,EAAS9T,EAAQ8T,OACjBW,EAAWX,GAEf,MAAMY,EAAO,GACb,GAAmB,iBAAR9V,GAA4B,OAARA,EAC3B,MAAO,GAEX,MAAMgV,EAAsB3C,GAAwBjR,EAAQ8R,aACtD+B,EAAyC,UAAxBD,GAAmC5T,EAAQ6T,eAC7DY,IACDA,EAAWjK,OAAOkK,KAAK9V,IAEvBoB,EAAQ+T,MACRU,EAASV,KAAK/T,EAAQ+T,MAE1B,MAAMC,EAAc,IAAIgB,QACxB,IAAK,IAAIhX,EAAI,EAAGA,EAAIyW,EAAS9W,SAAUK,EAAG,CACtC,MAAMgH,EAAMyP,EAASzW,GACjBgC,EAAQuT,WAA0B,OAAb3U,EAAIoG,IAG7BuM,GAAcmD,EAAMhB,GAAgB9U,EAAIoG,GAAMA,EAE9C4O,EAAqBC,EAAgB7T,EAAQ6R,iBAAkB7R,EAAQwT,mBAAoBxT,EAAQuT,UAAWvT,EAAQmS,gBAAiBnS,EAAQkS,OAASlS,EAAQoS,QAAU,KAAMpS,EAAQ8T,OAAQ9T,EAAQ+T,KAAM/T,EAAQ4R,UAAW5R,EAAQoT,cAAepT,EAAQwS,OAAQxS,EAAQmT,UAAWnT,EAAQkT,iBAAkBlT,EAAQ+R,QAASiC,GAC1U,CACA,MAAMmB,EAAST,EAAKzB,KAAKjT,EAAQiS,WACjC,IAAId,GAAoC,IAA3BnR,EAAQ2R,eAA0B,IAAM,GAWrD,OAVI3R,EAAQgS,kBACgB,eAApBhS,EAAQ+R,QAERZ,GAAU,uBAIVA,GAAU,mBAGXgE,EAAOxX,OAAS,EAAIwT,EAASgE,EAAS,EACjD,CCnQA,IAAIC,GAMAC,GALG,SAASC,GAAWjD,GACvB,IAAID,EACJ,OAAQgD,KACFhD,EAAU,IAAI5I,WAAW+L,YAAiBH,GAAchD,EAAQF,OAAOxI,KAAK0I,KAAYC,EAClG,CAEO,SAASmD,GAAWC,GACvB,IAAIC,EACJ,OAAQL,KACFK,EAAU,IAAIlM,WAAWmM,YAAiBN,GAAcK,EAAQE,OAAOlM,KAAKgM,KAAYD,EAClG,CCxBA,IAAII,GAAqBC,GASlB,MAAMC,GACT,WAAAjL,GACI+K,GAAoB1M,IAAI+B,UAAM,GAC9B4K,GAAiC3M,IAAI+B,UAAM,GAC3CtC,EAAuBsC,KAAM2K,GAAqB,IAAIjM,YACtDhB,EAAuBsC,KAAM4K,GAAkC,KACnE,CACA,MAAAF,CAAOI,GACH,GAAa,MAATA,EACA,MAAO,GAEX,MAAMC,EAAcD,aAAiBE,YAAc,IAAItM,WAAWoM,GAC3C,iBAAVA,EAAqBV,GAAWU,GACnCA,EACVpN,EAAuBsC,KAAM2K,GDvB9B,SAAqBM,GACxB,IAAIxY,EAAS,EACb,IAAK,MAAMyY,KAAUD,EACjBxY,GAAUyY,EAAOzY,OAErB,MAAM0Y,EAAS,IAAIzM,WAAWjM,GAC9B,IAAIyC,EAAQ,EACZ,IAAK,MAAMgW,KAAUD,EACjBE,EAAOlN,IAAIiN,EAAQhW,GACnBA,GAASgW,EAAOzY,OAEpB,OAAO0Y,CACX,CCW0DC,CAAY,CAAClN,EAAuB8B,KAAM2K,GAAqB,KAAMI,KACvH,MAAMM,EAAQ,GACd,IAAIC,EACJ,KAAyK,OAAjKA,EAAeC,GAAiBrN,EAAuB8B,KAAM2K,GAAqB,KAAMzM,EAAuB8B,KAAM4K,GAAkC,QAAgB,CAC3K,GAAIU,EAAaE,UAAmF,MAAvEtN,EAAuB8B,KAAM4K,GAAkC,KAAc,CAEtGlN,EAAuBsC,KAAM4K,GAAkCU,EAAapW,OAC5E,QACJ,CAEA,GAA2E,MAAvEgJ,EAAuB8B,KAAM4K,GAAkC,OAC9DU,EAAapW,QAAUgJ,EAAuB8B,KAAM4K,GAAkC,KAAO,GAAKU,EAAaE,UAAW,CAC3HH,EAAMtY,KAAKuX,GAAWpM,EAAuB8B,KAAM2K,GAAqB,KAAKc,SAAS,EAAGvN,EAAuB8B,KAAM4K,GAAkC,KAAO,KAC/JlN,EAAuBsC,KAAM2K,GAAqBzM,EAAuB8B,KAAM2K,GAAqB,KAAKc,SAASvN,EAAuB8B,KAAM4K,GAAkC,OACjLlN,EAAuBsC,KAAM4K,GAAkC,MAC/D,QACJ,CACA,MAAMc,EAAmF,OAAxExN,EAAuB8B,KAAM4K,GAAkC,KAAgBU,EAAaK,UAAY,EAAIL,EAAaK,UACpIC,EAAOtB,GAAWpM,EAAuB8B,KAAM2K,GAAqB,KAAKc,SAAS,EAAGC,IAC3FL,EAAMtY,KAAK6Y,GACXlO,EAAuBsC,KAAM2K,GAAqBzM,EAAuB8B,KAAM2K,GAAqB,KAAKc,SAASH,EAAapW,QAC/HwI,EAAuBsC,KAAM4K,GAAkC,KACnE,CACA,OAAOS,CACX,CACA,KAAAQ,GACI,OAAK3N,EAAuB8B,KAAM2K,GAAqB,KAAKlY,OAGrDuN,KAAK0K,OAAO,MAFR,EAGf,EAeJ,SAASa,GAAiBL,EAAQY,GAG9B,IAAK,IAAIhZ,EAAIgZ,GAAc,EAAGhZ,EAAIoY,EAAOzY,OAAQK,IAAK,CAClD,GAHY,KAGRoY,EAAOpY,GACP,MAAO,CAAE6Y,UAAW7Y,EAAGoC,MAAOpC,EAAI,EAAG0Y,UAAU,GAEnD,GALa,KAKTN,EAAOpY,GACP,MAAO,CAAE6Y,UAAW7Y,EAAGoC,MAAOpC,EAAI,EAAG0Y,UAAU,EAEvD,CACA,OAAO,IACX,CACO,SAASO,GAAuBb,GAMnC,IAAK,IAAIpY,EAAI,EAAGA,EAAIoY,EAAOzY,OAAS,EAAGK,IAAK,CACxC,GAHY,KAGRoY,EAAOpY,IAHC,KAGiBoY,EAAOpY,EAAI,GAEpC,OAAOA,EAAI,EAEf,GANa,KAMToY,EAAOpY,IANE,KAMiBoY,EAAOpY,EAAI,GAErC,OAAOA,EAAI,EAEf,GAVa,KAUToY,EAAOpY,IAXC,KAYRoY,EAAOpY,EAAI,IACXA,EAAI,EAAIoY,EAAOzY,QAZN,KAaTyY,EAAOpY,EAAI,IAdH,KAeRoY,EAAOpY,EAAI,GAEX,OAAOA,EAAI,CAEnB,CACA,OAAO,CACX,CAnDA6X,GAAsB,IAAIb,QAAWc,GAAmC,IAAId,QAE5Ee,GAAYmB,cAAgB,IAAIC,IAAI,CAAC,KAAM,OAC3CpB,GAAYqB,eAAiB,eCxD7B,MAAMC,GAAe,CACjBC,IAAK,EACL3T,MAAO,IACP4T,KAAM,IACNC,KAAM,IACNC,MAAO,KAEEC,GAAgB,CAACC,EAAYC,EAAYC,KXgB/C,IAAgBjZ,EAAKoG,EWfxB,GAAK2S,EAGL,OXYmB/Y,EWZRyY,GXYarS,EWZC2S,EXalBnN,OAAOC,UAAUiG,eAAerH,KAAKzK,EAAKoG,GWZtC2S,OAEXG,GAAUD,GAAQN,KAAK,GAAGK,gBAAyBpT,KAAKyD,UAAU0P,uBAAgCnT,KAAKyD,UAAUuC,OAAOkK,KAAK2C,OAC7G,EAEpB,SAASU,KAAS,CAClB,SAASC,GAAUC,EAASC,EAAQC,GAChC,OAAKD,GAAUb,GAAaY,GAAWZ,GAAac,GACzCJ,GAIAG,EAAOD,GAASvO,KAAKwO,EAEpC,CACA,MAAME,GAAa,CACfzU,MAAOoU,GACPR,KAAMQ,GACNP,KAAMO,GACNN,MAAOM,IAEX,IAAIM,GAAgC,IAAIrD,QACjC,SAAS8C,GAAUD,GACtB,MAAMK,EAASL,EAAOK,OAChBC,EAAWN,EAAOM,UAAY,MACpC,IAAKD,EACD,OAAOE,GAEX,MAAME,EAAeD,GAAcjU,IAAI8T,GACvC,GAAII,GAAgBA,EAAa,KAAOH,EACpC,OAAOG,EAAa,GAExB,MAAMC,EAAc,CAChB5U,MAAOqU,GAAU,QAASE,EAAQC,GAClCZ,KAAMS,GAAU,OAAQE,EAAQC,GAChCX,KAAMQ,GAAU,OAAQE,EAAQC,GAChCV,MAAOO,GAAU,QAASE,EAAQC,IAGtC,OADAE,GAAclP,IAAI+O,EAAQ,CAACC,EAAUI,IAC9BA,CACX,CACO,MAAMC,GAAwBC,IAC7BA,EAAQzY,UACRyY,EAAQzY,QAAU,IAAKyY,EAAQzY,gBACxByY,EAAQzY,QAAiB,SAEhCyY,EAAQ1N,UACR0N,EAAQ1N,QAAUP,OAAOkO,aAAaD,EAAQ1N,mBAAmB4N,QAAU,IAAIF,EAAQ1N,SAAWP,OAAOoO,QAAQH,EAAQ1N,UAAUjJ,KAAI,EAAEqI,EAAMrN,KAAW,CACtJqN,EACwB,kBAAvBA,EAAKxK,eACqB,WAAvBwK,EAAKxK,eACkB,eAAvBwK,EAAKxK,cACL,MACE7C,OAGV,wBAAyB2b,IACrBA,EAAQI,sBACRJ,EAAQK,QAAUL,EAAQI,4BAEvBJ,EAAQI,qBAEZJ,GC5EX,IAAIM,GCCAC,GCAAC,GFSG,MAAMC,GACT,WAAApO,CAAYkE,EAAUG,EAAY0I,GAC9B3M,KAAK8D,SAAWA,EAChB+J,GAAe5P,IAAI+B,UAAM,GACzBA,KAAKiE,WAAaA,EAClBvG,EAAuBsC,KAAM6N,GAAgBlB,EACjD,CACA,sBAAOsB,CAAgB7Z,EAAU6P,EAAY0I,GACzC,IAAIuB,GAAW,EACf,MAAMlB,EAASL,EAASC,GAAUD,GAAU7Y,QA6D5C,OAAO,IAAIka,IA5DXG,kBACI,GAAID,EACA,MAAM,IAAIxO,EAAY,4EAE1BwO,GAAW,EACX,IAAIhc,GAAO,EACX,IACI,UAAW,MAAMkc,KAgK1BD,gBAAiC/Z,EAAU6P,GAC9C,IAAK7P,EAAS0Q,KAAM,CAEhB,GADAb,EAAWoK,aACyB,IAAzB/P,WAAWwE,WACe,gBAAjCxE,WAAWwE,UAAUwL,QACrB,MAAM,IAAI5O,EAAY,kKAE1B,MAAM,IAAIA,EAAY,oDAC1B,CACA,MAAM6O,EAAa,IAAIC,GACjBC,EAAc,IAAI5D,GAClBlH,EAAOW,EAA8BlQ,EAAS0Q,MACpD,UAAW,MAAM4J,KAiBrBP,gBAA8BrK,GAC1B,IAAI5D,EAAO,IAAIxB,WACf,UAAW,MAAMoM,KAAShH,EAAU,CAChC,GAAa,MAATgH,EACA,SAEJ,MAAMC,EAAcD,aAAiBE,YAAc,IAAItM,WAAWoM,GAC3C,iBAAVA,EAAqBV,GAAWU,GACnCA,EACV,IAIIQ,EAJAqD,EAAU,IAAIjQ,WAAWwB,EAAKzN,OAASsY,EAAYtY,QAKvD,IAJAkc,EAAQ1Q,IAAIiC,GACZyO,EAAQ1Q,IAAI8M,EAAa7K,EAAKzN,QAC9ByN,EAAOyO,GAEkD,KAAjDrD,EAAeS,GAAuB7L,WACpCA,EAAKzE,MAAM,EAAG6P,GACpBpL,EAAOA,EAAKzE,MAAM6P,EAE1B,CACIpL,EAAKzN,OAAS,UACRyN,EAEd,CAvCiC0O,CAAcjL,GACvC,IAAK,MAAMiI,KAAQ6C,EAAY/D,OAAOgE,GAAW,CAC7C,MAAMN,EAAMG,EAAW7D,OAAOkB,GAC1BwC,UACMA,EACd,CAEJ,IAAK,MAAMxC,KAAQ6C,EAAY5C,QAAS,CACpC,MAAMuC,EAAMG,EAAW7D,OAAOkB,GAC1BwC,UACMA,EACd,CACJ,CAxLwCS,CAAiBza,EAAU6P,GAC/C,IAAI/R,EAEJ,GAAIkc,EAAIlO,KAAK4O,WAAW,UACpB5c,GAAO,OAGX,GAAkB,OAAdkc,EAAIW,OAAmBX,EAAIW,MAAMD,WAAW,WAe3C,CACD,IAAI5O,EACJ,IACIA,EAAO5G,KAAKC,MAAM6U,EAAIlO,KAC1B,CACA,MAAOnO,GAGH,MAFA+B,QAAQ2E,MAAM,qCAAsC2V,EAAIlO,MACxDpM,QAAQ2E,MAAM,cAAe2V,EAAIY,KAC3Bjd,CACV,CAEA,GAAiB,SAAbqc,EAAIW,MACJ,MAAM,IAAIpP,OAASuB,EAAWhB,EAAKzH,MAAOyH,EAAKlD,aAASkE,QAEtD,CAAE6N,MAAOX,EAAIW,MAAO7O,KAAMA,EACpC,KA9B4D,CACxD,IAAIA,EACJ,IACIA,EAAO5G,KAAKC,MAAM6U,EAAIlO,KAC1B,CACA,MAAOnO,GAGH,MAFAib,EAAOvU,MAAM,qCAAsC2V,EAAIlO,MACvD8M,EAAOvU,MAAM,cAAe2V,EAAIY,KAC1Bjd,CACV,CACA,GAAImO,GAAQA,EAAKzH,MACb,MAAM,IAAIkH,OAASuB,EAAWhB,EAAKzH,WAAOyI,EAAW9M,EAASyL,eAE5DK,CACV,CAkBJhO,GAAO,CACX,CACA,MAAOH,GAEH,GAAIiN,EAAajN,GACb,OACJ,MAAMA,CACV,CACZ,QAEqBG,GACD+R,EAAWoK,OACnB,CACJ,GAC4BpK,EAAY0I,EAC5C,CAKA,yBAAOsC,CAAmBC,EAAgBjL,EAAY0I,GAClD,IAAIuB,GAAW,EAwCf,OAAO,IAAIF,IA3BXG,kBACI,GAAID,EACA,MAAM,IAAIxO,EAAY,4EAE1BwO,GAAW,EACX,IAAIhc,GAAO,EACX,IACI,UAAW,MAAM0Z,KAnBzBuC,kBACI,MAAMM,EAAc,IAAI5D,GAClBlH,EAAOW,EAA8B4K,GAC3C,UAAW,MAAMpE,KAASnH,EACtB,IAAK,MAAMiI,KAAQ6C,EAAY/D,OAAOI,SAC5Bc,EAGd,IAAK,MAAMA,KAAQ6C,EAAY5C,cACrBD,CAEd,CAQiCuD,GACjBjd,GAEA0Z,UACMtS,KAAKC,MAAMqS,IAEzB1Z,GAAO,CACX,CACA,MAAOH,GAEH,GAAIiN,EAAajN,GACb,OACJ,MAAMA,CACV,CACZ,QAEqBG,GACD+R,EAAWoK,OACnB,CACJ,GAC4BpK,EAAY0I,EAC5C,CACA,EAAEkB,GAAiB,IAAI/D,QAAWlG,OAAOC,kBACrC,OAAO7D,KAAK8D,UAChB,CAKA,GAAAsL,GACI,MAAMC,EAAO,GACPC,EAAQ,GACRxL,EAAW9D,KAAK8D,WAChByL,EAAeC,IACV,CACH1d,KAAM,KACF,GAAqB,IAAjB0d,EAAM/c,OAAc,CACpB,MAAMR,EAAS6R,EAAShS,OACxBud,EAAKtc,KAAKd,GACVqd,EAAMvc,KAAKd,EACf,CACA,OAAOud,EAAMC,OAAO,IAIhC,MAAO,CACH,IAAIzB,IAAO,IAAMuB,EAAYF,IAAOrP,KAAKiE,WAAY/F,EAAuB8B,KAAM6N,GAAgB,MAClG,IAAIG,IAAO,IAAMuB,EAAYD,IAAQtP,KAAKiE,WAAY/F,EAAuB8B,KAAM6N,GAAgB,MAE3G,CAMA,gBAAA6B,GACI,MAAMC,EAAO3P,KACb,IAAI2D,EACJ,OAAOL,EAAmB,CACtB,WAAMS,GACFJ,EAAOgM,EAAK/L,OAAOC,gBACvB,EACA,UAAMG,CAAK4L,GACP,IACI,MAAMhe,MAAEA,EAAKM,KAAEA,SAAeyR,EAAK7R,OACnC,GAAII,EACA,OAAO0d,EAAK1L,QAChB,MAAMqG,EAAQH,GAAW9Q,KAAKyD,UAAUnL,GAAS,MACjDge,EAAKzL,QAAQoG,EACjB,CACA,MAAOxS,GACH6X,EAAKnX,MAAMV,EACf,CACJ,EACA,YAAMqM,SACIT,EAAKU,WACf,GAER,EAsDJ,MAAMmK,GACF,WAAA5O,GACII,KAAK+O,MAAQ,KACb/O,KAAKE,KAAO,GACZF,KAAK6P,OAAS,EAClB,CACA,MAAAnF,CAAOkB,GAIH,GAHIA,EAAKkE,SAAS,QACdlE,EAAOA,EAAKmE,UAAU,EAAGnE,EAAKnZ,OAAS,KAEtCmZ,EAAM,CAEP,IAAK5L,KAAK+O,QAAU/O,KAAKE,KAAKzN,OAC1B,OAAO,KACX,MAAM2b,EAAM,CACRW,MAAO/O,KAAK+O,MACZ7O,KAAMF,KAAKE,KAAK6H,KAAK,MACrBiH,IAAKhP,KAAK6P,QAKd,OAHA7P,KAAK+O,MAAQ,KACb/O,KAAKE,KAAO,GACZF,KAAK6P,OAAS,GACPzB,CACX,CAEA,GADApO,KAAK6P,OAAO9c,KAAK6Y,GACbA,EAAKkD,WAAW,KAChB,OAAO,KAEX,IAAKkB,EAAWC,EAAGre,GAa3B,SAAmBuV,EAAKJ,GACpB,MAAM7R,EAAQiS,EAAI+I,QAAQnJ,GAC1B,IAAc,IAAV7R,EACA,MAAO,CAACiS,EAAI4I,UAAU,EAAG7a,GAAQ6R,EAAWI,EAAI4I,UAAU7a,EAAQ6R,EAAUtU,SAEhF,MAAO,CAAC0U,EAAK,GAAI,GACrB,CAnBoCgJ,CAAUvE,EAAM,KAU5C,OATIha,EAAMkd,WAAW,OACjBld,EAAQA,EAAMme,UAAU,IAEV,UAAdC,EACAhQ,KAAK+O,MAAQnd,EAEM,SAAdoe,GACLhQ,KAAKE,KAAKnN,KAAKnB,GAEZ,IACX,EGnRGuc,eAAeiC,GAAqBzD,EAAQ0D,GAC/C,MAAMjc,SAAEA,EAAQkc,aAAEA,EAAY3C,oBAAEA,EAAmB4C,UAAEA,GAAcF,EAC7DvL,OAAa,WACf,GAAIuL,EAAMvb,QAAQyP,OAId,OAHAqI,GAAUD,GAAQJ,MAAM,WAAYnY,EAASgE,OAAQhE,EAASmE,IAAKnE,EAASyL,QAASzL,EAAS0Q,MAG1FuL,EAAMvb,QAAQ0b,cACPH,EAAMvb,QAAQ0b,cAAcvC,gBAAgB7Z,EAAUic,EAAMpM,WAAY0I,GAE5EqB,GAAOC,gBAAgB7Z,EAAUic,EAAMpM,WAAY0I,GAG9D,GAAwB,MAApBvY,EAASgE,OACT,OAAO,KAEX,GAAIiY,EAAMvb,QAAQ2b,iBACd,OAAOrc,EAEX,MAAMsc,EAActc,EAASyL,QAAQ3G,IAAI,gBACnCyX,EAAYD,GAAaE,MAAM,KAAK,IAAIlc,OAE9C,GADeic,GAAWxR,SAAS,qBAAuBwR,GAAWb,SAAS,SAClE,CAER,OAAOe,SADYzc,EAAS0c,OACF1c,EAC9B,CAEA,aADmBA,EAAStD,MAE/B,EA1BkB,GAkCnB,OAPA8b,GAAUD,GAAQJ,MAAM,IAAI+D,qBAAiChD,GAAqB,CAC9EK,sBACApV,IAAKnE,EAASmE,IACdH,OAAQhE,EAASgE,OACjB0M,OACAiM,WAAY3I,KAAK4I,MAAQT,KAEtBzL,CACX,CACO,SAAS+L,GAAajf,EAAOwC,GAChC,OAAKxC,GAA0B,iBAAVA,GAAsB8E,MAAM8K,QAAQ5P,GAC9CA,EAEJ0N,OAAO2R,eAAerf,EAAO,cAAe,CAC/CA,MAAOwC,EAASyL,QAAQ3G,IAAI,gBAC5BgY,YAAY,GAEpB,CFzCO,MAAMC,WAAmB3f,QAC5B,WAAAoO,CAAY+M,EAAQyE,EAAiBC,EAAgBjB,IACjDtQ,OAAOrO,IAIHA,EAAQ,KAAK,IAEjBuO,KAAKoR,gBAAkBA,EACvBpR,KAAKqR,cAAgBA,EACrBvD,GAAmB7P,IAAI+B,UAAM,GAC7BtC,EAAuBsC,KAAM8N,GAAoBnB,EACrD,CACA,WAAA2E,CAAYC,GACR,OAAO,IAAIJ,GAAWjT,EAAuB8B,KAAM8N,GAAoB,KAAM9N,KAAKoR,iBAAiBjD,MAAOxB,EAAQ0D,IAAUQ,GAAaU,QAAgBvR,KAAKqR,cAAc1E,EAAQ0D,GAAQA,GAAQA,EAAMjc,WAC9M,CAYA,UAAAod,GACI,OAAOxR,KAAKoR,gBAAgBjf,MAAMsf,GAAMA,EAAErd,UAC9C,CAaA,kBAAMsd,GACF,MAAOxR,EAAM9L,SAAkB5C,QAAQmgB,IAAI,CAAC3R,KAAKzG,QAASyG,KAAKwR,eAC/D,MAAO,CAAEtR,OAAM9L,WAAUwd,WAAYxd,EAASyL,QAAQ3G,IAAI,gBAC9D,CACA,KAAAK,GAII,OAHKyG,KAAK6R,gBACN7R,KAAK6R,cAAgB7R,KAAKoR,gBAAgBjf,MAAM+N,GAASF,KAAKqR,cAAcnT,EAAuB8B,KAAM8N,GAAoB,KAAM5N,MAEhIF,KAAK6R,aAChB,CACA,IAAA1f,CAAK2f,EAAaC,GACd,OAAO/R,KAAKzG,QAAQpH,KAAK2f,EAAaC,EAC1C,CACA,MAAMA,GACF,OAAO/R,KAAKzG,QAAQyY,MAAMD,EAC9B,CACA,QAAQE,GACJ,OAAOjS,KAAKzG,QAAQ2Y,QAAQD,EAChC,EAEJnE,GAAqB,IAAIhE,QC/DlB,MAAMqI,GACT,WAAAvS,CAAY+M,EAAQvY,EAAU0Q,EAAMhQ,GAChCiZ,GAAqB9P,IAAI+B,UAAM,GAC/BtC,EAAuBsC,KAAM+N,GAAsBpB,GACnD3M,KAAKlL,QAAUA,EACfkL,KAAK5L,SAAWA,EAChB4L,KAAK8E,KAAOA,CAChB,CACA,WAAAsN,GAEI,QADcpS,KAAKqS,oBACR5f,QAE6B,MAAjCuN,KAAKsS,wBAChB,CACA,iBAAMC,GACF,MAAMC,EAAcxS,KAAKsS,yBACzB,IAAKE,EACD,MAAM,IAAI9S,EAAY,yFAE1B,aAAaxB,EAAuB8B,KAAM+N,GAAsB,KAAK0E,eAAezS,KAAKJ,YAAa4S,EAC1G,CACA,eAAOE,GACH,IAAIC,EAAO3S,KAEX,UADM2S,EACCA,EAAKP,eACRO,QAAaA,EAAKJ,oBACZI,CAEd,CACA,QAAS5E,GAAuB,IAAIjE,QAAWlG,OAAOC,kBAClD,UAAW,MAAM8O,KAAQ3S,KAAK0S,YAC1B,IAAK,MAAMhW,KAAQiW,EAAKN,0BACd3V,CAGlB,EAWG,MAAMkW,WAAoBzB,GAC7B,WAAAvR,CAAY+M,EAAQkG,EAASC,GACzBhT,MAAM6M,EAAQkG,GAAS1E,MAAOxB,EAAQ0D,IAAU,IAAIyC,EAAKnG,EAAQ0D,EAAMjc,eAAgBgc,GAAqBzD,EAAQ0D,GAAQA,EAAMvb,UACtI,CAQA,OAAQ8O,OAAOC,iBACX,MAAM8O,QAAa3S,MACnB,UAAW,MAAMtD,KAAQiW,QACfjW,CAEd,EAKG,MAAMoW,WAAaX,GACtB,WAAAvS,CAAY+M,EAAQvY,EAAU0Q,EAAMhQ,GAChCgL,MAAM6M,EAAQvY,EAAU0Q,EAAMhQ,GAC9BkL,KAAKE,KAAO4E,EAAK5E,MAAQ,GACzBF,KAAKyI,OAAS3D,EAAK2D,MACvB,CACA,iBAAA4J,GACI,OAAOrS,KAAKE,MAAQ,EACxB,CACA,sBAAAoS,GACI,OAAO,IACX,EAEG,MAAMS,WAAmBZ,GAC5B,WAAAvS,CAAY+M,EAAQvY,EAAU0Q,EAAMhQ,GAChCgL,MAAM6M,EAAQvY,EAAU0Q,EAAMhQ,GAC9BkL,KAAKE,KAAO4E,EAAK5E,MAAQ,GACzBF,KAAKgT,SAAWlO,EAAKkO,WAAY,CACrC,CACA,iBAAAX,GACI,OAAOrS,KAAKE,MAAQ,EACxB,CACA,WAAAkS,GACI,OAAsB,IAAlBpS,KAAKgT,UAGFlT,MAAMsS,aACjB,CACA,sBAAAE,GACI,MAAMpS,EAAOF,KAAKqS,oBACZhd,EAAK6K,EAAKA,EAAKzN,OAAS,IAAI4C,GAClC,OAAKA,EAGE,IACA2K,KAAKlL,QACRuI,MAAO,IACAsE,EAAS3B,KAAKlL,QAAQuI,OACzB4V,MAAO5d,IANJ,IASf,EAEG,MAAM6d,WAA+Bf,GACxC,WAAAvS,CAAY+M,EAAQvY,EAAU0Q,EAAMhQ,GAChCgL,MAAM6M,EAAQvY,EAAU0Q,EAAMhQ,GAC9BkL,KAAKE,KAAO4E,EAAK5E,MAAQ,GACzBF,KAAKgT,SAAWlO,EAAKkO,WAAY,EACjChT,KAAKmT,QAAUrO,EAAKqO,SAAW,EACnC,CACA,iBAAAd,GACI,OAAOrS,KAAKE,MAAQ,EACxB,CACA,WAAAkS,GACI,OAAsB,IAAlBpS,KAAKgT,UAGFlT,MAAMsS,aACjB,CACA,sBAAAE,GACI,MAAMc,EAASpT,KAAKmT,QACpB,OAAKC,EAGE,IACApT,KAAKlL,QACRuI,MAAO,IACAsE,EAAS3B,KAAKlL,QAAQuI,OACzB4V,MAAOG,IANJ,IASf,EEhJG,MAAMC,GAAmB,KAC5B,GAAoB,oBAATC,KAAsB,CAC7B,MAAMhR,QAAEA,GAAYhE,WACdiV,EAA+C,iBAA5BjR,GAASkR,UAAUC,MAAqB/L,SAASpF,EAAQkR,SAASC,KAAK7C,MAAM,MAAQ,GAC9G,MAAM,IAAIvR,MAAM,0EACXkU,EACG,6FACE,IACd,GAMG,SAASG,GAASC,EAAUC,EAAU9e,GAEzC,OADAue,KACO,IAAIC,KAAKK,EAAUC,GAAY,eAAgB9e,EAC1D,CACO,SAAS+e,GAAQjiB,GACpB,OAA2B,iBAAVA,GACH,OAAVA,IACE,SAAUA,GAASA,EAAMqN,MAAQC,OAAOtN,EAAMqN,OAC3C,QAASrN,GAASA,EAAM2G,KAAO2G,OAAOtN,EAAM2G,MAC5C,aAAc3G,GAASA,EAAMkiB,UAAY5U,OAAOtN,EAAMkiB,WACtD,SAAUliB,GAASA,EAAMmiB,MAAQ7U,OAAOtN,EAAMmiB,QACnD,IACCnD,MAAM,SACNoD,YAAS9S,CAClB,CACO,MAAM+S,GAAmBriB,GAAmB,MAATA,GAAkC,iBAAVA,GAA6D,mBAAhCA,EAAMgS,OAAOC,eAU/FqQ,GAA8B/F,MAAOpE,EAAMoK,KAC7C,IAAKpK,EAAMjF,WAAYsP,GAAWrK,EAAKjF,KAAMqP,KAElDE,GAAsC,IAAIvK,QA+BzC,MAAMsK,GAAajG,MAAOrJ,EAAMqP,KACnC,UAzBJ,SAA0BG,GACtB,MAAMH,EAA+B,mBAAhBG,EAA6BA,EAAcA,EAAYH,MACtEI,EAASF,GAAoBnb,IAAIib,GACvC,GAAII,EACA,OAAOA,EACX,MAAMC,EAAU,WACZ,IACI,MAAMC,EAAiB,aAAcN,EACjCA,EAAMO,gBACGP,EAAM,WAAWvU,YACxBM,EAAO,IAAIyU,SACjB,OAAIzU,EAAKnB,mBAAsB,IAAI0V,EAAcvU,GAAMpP,MAI3D,CACA,MAEI,OAAO,CACX,CACH,EAfe,GAiBhB,OADAujB,GAAoBpW,IAAIkW,EAAOK,GACxBA,CACX,CAEgBI,CAAiBT,GACzB,MAAM,IAAInW,UAAU,qGAExB,MAAM6W,EAAO,IAAIF,SAEjB,aADMnjB,QAAQmgB,IAAIrS,OAAOoO,QAAQ5I,GAAQ,CAAA,GAAIlO,KAAI,EAAEkD,EAAKlI,KAAWkjB,GAAaD,EAAM/a,EAAKlI,MACpFijB,CAAI,EAqBTC,GAAe3G,MAAO0G,EAAM/a,EAAKlI,KACnC,QAAcsP,IAAVtP,EAAJ,CAEA,GAAa,MAATA,EACA,MAAM,IAAIoM,UAAU,sBAAsBlE,gEAG9C,GAAqB,iBAAVlI,GAAuC,iBAAVA,GAAuC,kBAAVA,EACjEijB,EAAKE,OAAOjb,EAAKoF,OAAOtN,SAEvB,GAAIA,aAAiB8iB,SACtBG,EAAKE,OAAOjb,EAAK4Z,GAAS,OAAO9hB,EAAMojB,QAASnB,GAAQjiB,UAEvD,GAAIqiB,GAAgBriB,GACrBijB,EAAKE,OAAOjb,EAAK4Z,GAAS,OAAO,IAAIgB,SAASjR,EAAmB7R,IAAQojB,QAASnB,GAAQjiB,UAEzF,GAjCW,CAACA,GAAUA,aAAiBqjB,MAAQ,SAAUrjB,EAiCrDsjB,CAAYtjB,GACjBijB,EAAKE,OAAOjb,EAAKlI,EAAOiiB,GAAQjiB,SAE/B,GAAI8E,MAAM8K,QAAQ5P,SACbJ,QAAQmgB,IAAI/f,EAAMgF,KAAKue,GAAUL,GAAaD,EAAM/a,EAAM,KAAMqb,UAErE,IAAqB,iBAAVvjB,EAIZ,MAAM,IAAIoM,UAAU,wGAAwGpM,mBAHtHJ,QAAQmgB,IAAIrS,OAAOoO,QAAQ9b,GAAOgF,KAAI,EAAEqI,EAAMmW,KAAUN,GAAaD,EAAM,GAAG/a,KAAOmF,KAASmW,KAIxG,CAzBI,CAyBJ,EC3HEC,GAAczjB,GAAmB,MAATA,GACT,iBAAVA,GACe,iBAAfA,EAAM0jB,MACS,iBAAf1jB,EAAMyG,MACS,mBAAfzG,EAAMd,MACU,mBAAhBc,EAAM6J,OACgB,mBAAtB7J,EAAM2jB,YAgDjBpH,eAAeqH,GAAS5jB,GACpB,IAAI6jB,EAAQ,GACZ,GAAqB,iBAAV7jB,GACPoZ,YAAY0K,OAAO9jB,IACnBA,aAAiBoZ,YACjByK,EAAM1iB,KAAKnB,QAEV,GAAIyjB,GAAWzjB,GAChB6jB,EAAM1iB,KAAKnB,aAAiBqjB,KAAOrjB,QAAcA,EAAM2jB,mBAEtD,KAAItB,GAAgBriB,GAMpB,CACD,MAAMgO,EAAchO,GAAOgO,aAAaX,KACxC,MAAM,IAAII,MAAM,gCAAgCzN,IAAQgO,EAAc,kBAAkBA,IAAgB,KAIhH,SAAuBhO,GACnB,GAAqB,iBAAVA,GAAgC,OAAVA,EAC7B,MAAO,GACX,MAAMye,EAAQ/Q,OAAOqW,oBAAoB/jB,GACzC,MAAO,aAAaye,EAAMzZ,KAAK6a,GAAM,IAAIA,OAAM1J,KAAK,QACxD,CATqH6N,CAAchkB,KAC/H,CAPI,UAAW,MAAMkZ,KAASlZ,EACtB6jB,EAAM1iB,cAAeyiB,GAAS1K,GAMtC,CACA,OAAO2K,CACX,CC/EO,MAAMI,GACT,WAAAjW,CAAY+M,GACR3M,KAAK8V,QAAUnJ,CACnB,ECKG,SAASoJ,GAAc5O,GAC1B,OAAOA,EAAIvU,QAAQ,mCAAoCojB,mBAC3D,CACA,MAAMC,GAAwB3W,OAAO4W,OAAuB5W,OAAO6W,OAAO,OAC7DC,GAAwB,CAACC,EAAcN,KAAkB,SAAcO,KAAYC,GAE5F,GAAuB,IAAnBD,EAAQ7jB,OACR,OAAO6jB,EAAQ,GACnB,IAAIE,GAAW,EACf,MAAMC,EAAkB,GAClB1C,EAAOuC,EAAQI,QAAO,CAACC,EAAeC,EAAc1hB,KAClD,OAAO2hB,KAAKD,KACZJ,GAAW,GAEf,MAAM5kB,EAAQ2kB,EAAOrhB,GACrB,IAAI4hB,GAAWN,EAAWR,mBAAqBK,GAAa,GAAKzkB,GAiBjE,OAhBIsD,IAAUqhB,EAAO9jB,SACP,MAATb,GACqB,iBAAVA,GAEJA,EAAMmN,WACFO,OAAOyX,eAAezX,OAAOyX,eAAenlB,EAAM4T,gBAAkByQ,KAAUA,KACxElX,YAClB+X,EAAUllB,EAAQ,GAClB6kB,EAAgB1jB,KAAK,CACjBgR,MAAO4S,EAAclkB,OAASmkB,EAAankB,OAC3CA,OAAQqkB,EAAQrkB,OAChBgG,MAAO,iBAAiB6G,OAAOC,UAAUR,SACpCZ,KAAKvM,GACL6J,MAAM,yCAGZkb,EAAgBC,GAAgB1hB,IAAUqhB,EAAO9jB,OAAS,GAAKqkB,EAAQ,GAC/E,IACGE,EAAWjD,EAAKnD,MAAM,OAAQ,GAAG,GACjCqG,EAAwB,qCAC9B,IAAI7gB,EAEJ,KAA0D,QAAlDA,EAAQ6gB,EAAsBhU,KAAK+T,KACvCP,EAAgB1jB,KAAK,CACjBgR,MAAO3N,EAAMlB,MACbzC,OAAQ2D,EAAM,GAAG3D,OACjBgG,MAAO,UAAUrC,EAAM,mDAI/B,GADAqgB,EAAgB5N,MAAK,CAAClP,EAAGC,IAAMD,EAAEoK,MAAQnK,EAAEmK,QACvC0S,EAAgBhkB,OAAS,EAAG,CAC5B,IAAIykB,EAAU,EACd,MAAMC,EAAYV,EAAgBC,QAAO,CAACU,EAAKxP,KAC3C,MAAMyP,EAAS,IAAIjR,OAAOwB,EAAQ7D,MAAQmT,GACpCI,EAAS,IAAIlR,OAAOwB,EAAQnV,QAElC,OADAykB,EAAUtP,EAAQ7D,MAAQ6D,EAAQnV,OAC3B2kB,EAAMC,EAASC,CAAM,GAC7B,IACH,MAAM,IAAI5X,EAAY,0DAA0D+W,EAC3E7f,KAAK7E,GAAMA,EAAE0G,QACbsP,KAAK,UAAUgM,MAASoD,IACjC,CACA,OAAOpD,CACX,EAIaA,GAAuBqC,GAAsBL,WCpEnD,cAAuBF,GAe1B,IAAA0B,CAAKC,EAAcna,EAAQ,CAAA,EAAIvI,GAC3B,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,qBAAqByD,aAAuB,GAAgB,CAAEna,WAAUvI,GAChH,GCpBG,SAAS4iB,GAA6BC,GACzC,YAAgBzW,IAATyW,GAAsB,aAAcA,QAA0BzW,IAAlByW,EAAKC,QAC5D,CA6BO,SAASC,GAA6BC,GACzC,MAAuC,mCAAhCA,GAA0B,MACrC,CAmBO,SAASC,GAAmBJ,GAC/B,MAA4B,wBAArBA,GAAe,MAC1B,CAwBO,SAASK,GAAoBC,EAAY1B,GAC5C,MAAM2B,EAAUD,EAAWC,QAAQthB,KAAKuhB,IACpC,GAA6B,WAAzBA,EAAOC,cACP,MAAM,IAAIhX,EAEd,GAA6B,mBAAzB+W,EAAOC,cACP,MAAM,IAAI/W,EAGd,OADAgX,GAAkDF,EAAOnb,QAAQsb,YAC1D,IACAH,EACHnb,QAAS,IACFmb,EAAOnb,WACNmb,EAAOnb,QAAQsb,WACf,CACIA,WAAYH,EAAOnb,QAAQsb,YAAY1hB,KAAK2hB,GAwBpE,SAAuBhC,EAAQgC,GAC3B,MAAMC,EAAYjC,EAAOkC,OAAOC,MAAMF,GAAcd,GAA6Bc,IAAcA,EAAUZ,UAAU3Y,OAASsZ,EAASX,SAAS3Y,OAC9I,MAAO,IACAsZ,EACHX,SAAU,IACHW,EAASX,SACZe,iBAAkBZ,GAAmBS,GAAaA,EAAUI,UAAUL,EAASX,SAASiB,WAClFL,GAAWZ,SAASkB,OAASxf,KAAKC,MAAMgf,EAASX,SAASiB,WACtD,MAGtB,CAnCiFE,CAAcxC,EAAQgC,WAAcrX,QAE/FA,EACN8X,OAAQb,EAAOnb,QAAQnH,UAAYsiB,EAAOnb,QAAQic,QAC9CC,GAAoB3C,EAAQ4B,EAAOnb,QAAQnH,SACzC,MAEb,IAEL,MAAO,IAAKoiB,EAAYC,UAC5B,CACA,SAASgB,GAAoB3C,EAAQ1gB,GACjC,GAAqC,gBAAjC0gB,EAAOuB,iBAAiBzf,KACxB,OAAO,KAEX,GAAqC,gBAAjCke,EAAOuB,iBAAiBzf,KAAwB,CAChD,GAAI,cAAeke,EAAOuB,gBAAiB,CAEvC,OADwBvB,EAAOuB,gBACRc,UAAU/iB,EACrC,CACA,OAAOyD,KAAKC,MAAM1D,EACtB,CACA,OAAO,IACX,CAaO,SAASsjB,GAAoB5C,EAAQgC,GACxC,IAAKhC,KAAY,UAAWA,KAAYA,EAAOkC,MAC3C,OAAO,EAEX,MAAMD,EAAYjC,EAAOkC,OAAOC,MAAMF,GAAcd,GAA6Bc,IAAcA,EAAUZ,UAAU3Y,OAASsZ,EAASX,SAAS3Y,OAC9I,OAAQyY,GAA6Bc,KAChCT,GAAmBS,IAAcA,GAAWZ,SAASkB,SAAU,EACxE,CACO,SAASM,GAAsB7C,GAClC,QAAIsB,GAA6BtB,EAAOuB,mBAGhCvB,EAAOkC,OAAOY,MAAMC,GAAMvB,GAAmBuB,IAAkB,aAAXA,EAAEjhB,OAA6C,IAAtBihB,EAAE1B,SAASkB,WAAqB,EACzH,CACO,SAAST,GAAkDkB,GAC9D,IAAK,MAAMhB,KAAYgB,GAAa,GAChC,GAAsB,aAAlBhB,EAASlgB,KACT,MAAM,IAAIqH,EAAY,oEAAoE6Y,EAASlgB,SAG/G,CCtJO,MAAMmhB,GAAsBxc,GACN,cAAlBA,GAASpH,KAEP6jB,GAAiBzc,GACD,SAAlBA,GAASpH,KCJpB,IAAI8jB,GAAwBC,GAA+BC,GAAsCC,GAAqCC,GAAyBC,GAAgCC,GAA+BC,GAAwBC,GAAoBC,GAAsBC,GAAsBC,GAAqCC,GCAvVC,GAAyCC,GAA+CC,GAA+CC,GAAwDC,GAA8DC,GAAmDC,GAA8CC,GDG3V,MAAMC,GACT,WAAAnb,GACI8Z,GAAuBsB,IAAIhb,MAC3BA,KAAKiE,WAAa,IAAIgX,gBACtBtB,GAA8B1b,IAAI+B,UAAM,GACxC4Z,GAAqC3b,IAAI+B,MAAM,SAC/C6Z,GAAoC5b,IAAI+B,MAAM,SAC9C8Z,GAAwB7b,IAAI+B,UAAM,GAClC+Z,GAA+B9b,IAAI+B,MAAM,SACzCga,GAA8B/b,IAAI+B,MAAM,SACxCia,GAAuBhc,IAAI+B,KAAM,IACjCka,GAAmBjc,IAAI+B,MAAM,GAC7Bma,GAAqBlc,IAAI+B,MAAM,GAC/Boa,GAAqBnc,IAAI+B,MAAM,GAC/Bqa,GAAoCpc,IAAI+B,MAAM,GAC9CtC,EAAuBsC,KAAM2Z,GAA+B,IAAInoB,SAAQ,CAACC,EAASC,KAC9EgM,EAAuBsC,KAAM4Z,GAAsCnoB,GACnEiM,EAAuBsC,KAAM6Z,GAAqCnoB,EAAY,KAElFgM,EAAuBsC,KAAM8Z,GAAyB,IAAItoB,SAAQ,CAACC,EAASC,KACxEgM,EAAuBsC,KAAM+Z,GAAgCtoB,GAC7DiM,EAAuBsC,KAAMga,GAA+BtoB,EAAY,KAM5EwM,EAAuB8B,KAAM2Z,GAA+B,KAAK3H,OAAM,SACvE9T,EAAuB8B,KAAM8Z,GAAyB,KAAK9H,OAAM,QACrE,CACA,IAAAkJ,CAAKC,GAGDjqB,YAAW,KACPiqB,IAAWhpB,MAAK,KACZ6N,KAAKob,aACLpb,KAAKqb,MAAM,MAAM,GAClBnd,EAAuB8B,KAAM0Z,GAAwB,IAAKY,IAA0B9b,KAAKwB,MAAM,GACnG,EACP,CACA,UAAAsb,GACQtb,KAAKub,QAETrd,EAAuB8B,KAAM4Z,GAAsC,KAAKzb,KAAK6B,MAC7EA,KAAKqb,MAAM,WACf,CACA,SAAIE,GACA,OAAOrd,EAAuB8B,KAAMka,GAAoB,IAC5D,CACA,WAAIsB,GACA,OAAOtd,EAAuB8B,KAAMma,GAAsB,IAC9D,CACA,WAAIsB,GACA,OAAOvd,EAAuB8B,KAAMoa,GAAsB,IAC9D,CACA,KAAA/L,GACIrO,KAAKiE,WAAWoK,OACpB,CAQA,EAAAqN,CAAG3M,EAAO4M,GAGN,OAFkBzd,EAAuB8B,KAAMia,GAAwB,KAAKlL,KAAW7Q,EAAuB8B,KAAMia,GAAwB,KAAKlL,GAAS,KAChJhc,KAAK,CAAE4oB,aACV3b,IACX,CAQA,GAAAoM,CAAI2C,EAAO4M,GACP,MAAMC,EAAY1d,EAAuB8B,KAAMia,GAAwB,KAAKlL,GAC5E,IAAK6M,EACD,OAAO5b,KACX,MAAM9K,EAAQ0mB,EAAUC,WAAWC,GAAMA,EAAEH,WAAaA,IAGxD,OAFIzmB,GAAS,GACT0mB,EAAUG,OAAO7mB,EAAO,GACrB8K,IACX,CAMA,IAAAgc,CAAKjN,EAAO4M,GAGR,OAFkBzd,EAAuB8B,KAAMia,GAAwB,KAAKlL,KAAW7Q,EAAuB8B,KAAMia,GAAwB,KAAKlL,GAAS,KAChJhc,KAAK,CAAE4oB,WAAUK,MAAM,IAC1Bhc,IACX,CAYA,OAAAic,CAAQlN,GACJ,OAAO,IAAIvd,SAAQ,CAACC,EAASC,KACzBgM,EAAuBsC,KAAMqa,IAAqC,GACpD,UAAVtL,GACA/O,KAAKgc,KAAK,QAAStqB,GACvBsO,KAAKgc,KAAKjN,EAAOtd,EAAQ,GAEjC,CACA,UAAMS,GACFwL,EAAuBsC,KAAMqa,IAAqC,SAC5Dnc,EAAuB8B,KAAM8Z,GAAyB,IAChE,CACA,KAAAuB,CAAMtM,KAAUxL,GAEZ,GAAIrF,EAAuB8B,KAAMka,GAAoB,KACjD,OAEU,QAAVnL,IACArR,EAAuBsC,KAAMka,IAAoB,GACjDhc,EAAuB8B,KAAM+Z,GAAgC,KAAK5b,KAAK6B,OAE3E,MAAM4b,EAAY1d,EAAuB8B,KAAMia,GAAwB,KAAKlL,GAK5E,GAJI6M,IACA1d,EAAuB8B,KAAMia,GAAwB,KAAKlL,GAAS6M,EAAUhT,QAAQkT,IAAOA,EAAEE,OAC9FJ,EAAU5mB,SAAQ,EAAG2mB,cAAeA,KAAYpY,MAEtC,UAAVwL,EAAmB,CACnB,MAAMtW,EAAQ8K,EAAK,GAOnB,OANKrF,EAAuB8B,KAAMqa,GAAqC,MAASuB,GAAWnpB,QACvFjB,QAAQE,OAAO+G,GAEnByF,EAAuB8B,KAAM6Z,GAAqC,KAAK1b,KAAK6B,KAAMvH,GAClFyF,EAAuB8B,KAAMga,GAA+B,KAAK7b,KAAK6B,KAAMvH,QAC5EuH,KAAKqb,MAAM,MAEf,CACA,GAAc,UAAVtM,EAAmB,CAEnB,MAAMtW,EAAQ8K,EAAK,GACdrF,EAAuB8B,KAAMqa,GAAqC,MAASuB,GAAWnpB,QAOvFjB,QAAQE,OAAO+G,GAEnByF,EAAuB8B,KAAM6Z,GAAqC,KAAK1b,KAAK6B,KAAMvH,GAClFyF,EAAuB8B,KAAMga,GAA+B,KAAK7b,KAAK6B,KAAMvH,GAC5EuH,KAAKqb,MAAM,MACf,CACJ,CACA,UAAAD,GAAe,EEnKZ,SAASc,GAA4BrW,GACxC,MAA2B,mBAAbA,EAAGtM,KACrB,CFmKAogB,GAAgC,IAAI7P,QAAW8P,GAAuC,IAAI9P,QAAW+P,GAAsC,IAAI/P,QAAWgQ,GAA0B,IAAIhQ,QAAWiQ,GAAiC,IAAIjQ,QAAWkQ,GAAgC,IAAIlQ,QAAWmQ,GAAyB,IAAInQ,QAAWoQ,GAAqB,IAAIpQ,QAAWqQ,GAAuB,IAAIrQ,QAAWsQ,GAAuB,IAAItQ,QAAWuQ,GAAsC,IAAIvQ,QAAW4P,GAAyB,IAAIyC,QAAW7B,GAA2B,SAAkC7hB,GAKhlB,GAJAiF,EAAuBsC,KAAMma,IAAsB,GAC/C1hB,aAAiB4G,OAAwB,eAAf5G,EAAMwG,OAChCxG,EAAQ,IAAIwI,GAEZxI,aAAiBwI,EAEjB,OADAvD,EAAuBsC,KAAMoa,IAAsB,GAC5Cpa,KAAKqb,MAAM,QAAS5iB,GAE/B,GAAIA,aAAiBiH,EACjB,OAAOM,KAAKqb,MAAM,QAAS5iB,GAE/B,GAAIA,aAAiB4G,MAAO,CACxB,MAAM+c,EAAc,IAAI1c,EAAYjH,EAAMuE,SAG1C,OADAof,EAAY5c,MAAQ/G,EACbuH,KAAKqb,MAAM,QAASe,EAC/B,CACA,OAAOpc,KAAKqb,MAAM,QAAS,IAAI3b,EAAYR,OAAOzG,IACtD,ECjLA,MAAM4jB,GAA+B,GAC9B,MAAMC,WAAqCvB,GAC9C,WAAAnb,GACIE,SAAS+Y,WACT0B,GAAwCS,IAAIhb,MAC5CA,KAAKuc,iBAAmB,GACxBvc,KAAK5C,SAAW,EACpB,CACA,kBAAAof,CAAmBC,GACfzc,KAAKuc,iBAAiBxpB,KAAK0pB,GAC3Bzc,KAAKqb,MAAM,iBAAkBoB,GAC7B,MAAMzf,EAAUyf,EAAevE,QAAQ,IAAIlb,QAG3C,OAFIA,GACAgD,KAAK0c,YAAY1f,GACdyf,CACX,CACA,WAAAC,CAAY1f,EAAS2f,GAAO,GAIxB,GAHM,YAAa3f,IACfA,EAAQnH,QAAU,MACtBmK,KAAK5C,SAASrK,KAAKiK,GACf2f,EAEA,GADA3c,KAAKqb,MAAM,UAAWre,GAClByc,GAAczc,IAAYA,EAAQnH,QAElCmK,KAAKqb,MAAM,yBAA0Bre,EAAQnH,cAE5C,GAAI2jB,GAAmBxc,IAAYA,EAAQsb,WAC5C,IAAK,MAAMsE,KAAa5f,EAAQsb,WACL,aAAnBsE,EAAUvkB,MACV2H,KAAKqb,MAAM,mBAAoBuB,EAAUhF,SAK7D,CAKA,yBAAMiF,SACI7c,KAAK9N,OACX,MAAM+lB,EAAajY,KAAKuc,iBAAiBvc,KAAKuc,iBAAiB9pB,OAAS,GACxE,IAAKwlB,EACD,MAAM,IAAIvY,EAAY,mDAC1B,OAAOuY,CACX,CAKA,kBAAM6E,GAEF,aADM9c,KAAK9N,OACJgM,EAAuB8B,KAAMua,GAAyC,IAAKC,IAA+Crc,KAAK6B,KAC1I,CAKA,kBAAM+c,GAEF,aADM/c,KAAK9N,OACJgM,EAAuB8B,KAAMua,GAAyC,IAAKE,IAA+Ctc,KAAK6B,KAC1I,CAKA,2BAAMgd,GAEF,aADMhd,KAAK9N,OACJgM,EAAuB8B,KAAMua,GAAyC,IAAKG,IAAwDvc,KAAK6B,KACnJ,CACA,iCAAMid,GAEF,aADMjd,KAAK9N,OACJgM,EAAuB8B,KAAMua,GAAyC,IAAKI,IAA8Dxc,KAAK6B,KACzJ,CACA,gBAAMkd,GAEF,aADMld,KAAK9N,OACJgM,EAAuB8B,KAAMua,GAAyC,IAAKK,IAAmDzc,KAAK6B,KAC9I,CACA,kBAAAmd,GACI,MAAO,IAAInd,KAAKuc,iBACpB,CACA,UAAAnB,GACI,MAAMnD,EAAajY,KAAKuc,iBAAiBvc,KAAKuc,iBAAiB9pB,OAAS,GACpEwlB,GACAjY,KAAKqb,MAAM,sBAAuBpD,GACtC,MAAM8E,EAAe7e,EAAuB8B,KAAMua,GAAyC,IAAKE,IAA+Ctc,KAAK6B,MAChJ+c,GACA/c,KAAKqb,MAAM,eAAgB0B,GAC/B,MAAMD,EAAe5e,EAAuB8B,KAAMua,GAAyC,IAAKC,IAA+Crc,KAAK6B,MAChJ8c,GACA9c,KAAKqb,MAAM,eAAgByB,GAC/B,MAAMM,EAAoBlf,EAAuB8B,KAAMua,GAAyC,IAAKG,IAAwDvc,KAAK6B,MAC9Jod,GACApd,KAAKqb,MAAM,wBAAyB+B,GACxC,MAAMC,EAA0Bnf,EAAuB8B,KAAMua,GAAyC,IAAKI,IAA8Dxc,KAAK6B,MAC/I,MAA3Bqd,GACArd,KAAKqb,MAAM,8BAA+BgC,GAC1Crd,KAAKuc,iBAAiBlD,MAAMva,GAAMA,EAAEwe,SACpCtd,KAAKqb,MAAM,aAAcnd,EAAuB8B,KAAMua,GAAyC,IAAKK,IAAmDzc,KAAK6B,MAEpK,CACA,2BAAMud,CAAsB5Q,EAAQ4J,EAAQzhB,GACxC,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3DnQ,EAAuB8B,KAAMua,GAAyC,IAAKM,IAA8C1c,KAAK6B,KAAMuW,GACpI,MAAMkG,QAAuB9P,EAAO+Q,KAAKC,YAAYxH,OAAO,IAAKI,EAAQhS,QAAQ,GAAS,IAAKzP,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,SAEhI,OADAxd,KAAKsb,aACEtb,KAAKwc,mBAAmBxE,GAAoByE,EAAgBlG,GACvE,CACA,wBAAMqH,CAAmBjR,EAAQ4J,EAAQzhB,GACrC,IAAK,MAAMkI,KAAWuZ,EAAOnZ,SACzB4C,KAAK0c,YAAY1f,GAAS,GAE9B,aAAagD,KAAKud,sBAAsB5Q,EAAQ4J,EAAQzhB,EAC5D,CACA,eAAM+oB,CAAUlR,EAAQ4J,EAAQzhB,GAC5B,MAAMc,EAAO,QACPkoB,YAAEA,EAAc,OAAMvZ,OAAEA,KAAWwZ,GAAexH,EAClDyH,EAA8C,iBAAhBF,GAAiD,aAArBA,EAAYzlB,MAAuBylB,GAAalG,UAAU3Y,MACpHgf,mBAAEA,EAAqB5B,IAAiCvnB,GAAW,CAAA,EAEnEopB,EAAa3H,EAAOkC,MAAM7hB,KAAK+gB,IACjC,GAAII,GAAmBJ,GAAO,CAC1B,IAAKA,EAAKwG,UACN,MAAM,IAAIze,EAAY,yEAE1B,MAAO,CACHrH,KAAM,WACNuf,SAAU,CACNA,SAAUD,EAAKwG,UACflf,KAAM0Y,EAAKC,SAAS3Y,KACpBmf,YAAazG,EAAKC,SAASwG,aAAe,GAC1CC,WAAY1G,EAAKC,SAASyG,WAC1B9kB,MAAOoe,EAAKiB,UACZE,QAAQ,GAGpB,CACA,OAAOnB,CAAI,IAET2G,EAAkB,CAAA,EACxB,IAAK,MAAMxgB,KAAKogB,EACG,aAAXpgB,EAAEzF,OACFimB,EAAgBxgB,EAAE8Z,SAAS3Y,MAAQnB,EAAE8Z,SAASA,SAAS3Y,MAAQnB,EAAE8Z,UAGzE,MAAMa,EAAQ,UAAWlC,EACrB2H,EAAWtnB,KAAK0iB,GAAiB,aAAXA,EAAEjhB,KACpB,CACIA,KAAM,WACNuf,SAAU,CACN3Y,KAAMqa,EAAE1B,SAAS3Y,MAAQqa,EAAE1B,SAASA,SAAS3Y,KAC7Cof,WAAY/E,EAAE1B,SAASyG,WACvBD,YAAa9E,EAAE1B,SAASwG,YACxBtF,OAAQQ,EAAE1B,SAASkB,SAGzBQ,SACJpY,EACN,IAAK,MAAMlE,KAAWuZ,EAAOnZ,SACzB4C,KAAK0c,YAAY1f,GAAS,GAE9B,IAAK,IAAIlK,EAAI,EAAGA,EAAImrB,IAAsBnrB,EAAG,CACzC,MAAM2pB,QAAuBzc,KAAKud,sBAAsB5Q,EAAQ,IACzDoR,EACHD,cACArF,QACArb,SAAU,IAAI4C,KAAK5C,WACpBtI,GACGkI,EAAUyf,EAAevE,QAAQ,IAAIlb,QAC3C,IAAKA,EACD,MAAM,IAAI0C,EAAY,8CAE1B,IAAK1C,EAAQsb,YAAY7lB,OACrB,OAEJ,IAAK,MAAMmqB,KAAa5f,EAAQsb,WAAY,CACxC,GAAuB,aAAnBsE,EAAUvkB,KACV,SACJ,MAAMkmB,EAAe3B,EAAUvnB,IACzB4J,KAAEA,EAAM4Z,UAAWtV,GAASqZ,EAAUhF,SACtC/R,EAAKyY,EAAgBrf,GAC3B,IAAK4G,EAAI,CACL,MAAMhQ,EAAU,sBAAsByD,KAAKyD,UAAUkC,8BAAiCK,OAAOkK,KAAK8U,GAC7F1nB,KAAKqI,GAAS3F,KAAKyD,UAAUkC,KAC7B8I,KAAK,0BACV/H,KAAK0c,YAAY,CAAE9mB,OAAM2oB,eAAc1oB,YACvC,QACJ,CACK,GAAImoB,GAAwBA,IAAyB/e,EAAM,CAC5D,MAAMpJ,EAAU,sBAAsByD,KAAKyD,UAAUkC,OAAU3F,KAAKyD,UAAUihB,iCAC9Ehe,KAAK0c,YAAY,CAAE9mB,OAAM2oB,eAAc1oB,YACvC,QACJ,CACA,IAAImjB,EACJ,IACIA,EAASkD,GAA4BrW,SAAYA,EAAGtM,MAAMgK,GAAQA,CACtE,CACA,MAAO9K,GACH,MAAM5C,EAAU4C,aAAiB4G,MAAQ5G,EAAMuE,QAAUkC,OAAOzG,GAChEuH,KAAK0c,YAAY,CAAE9mB,OAAM2oB,eAAc1oB,YACvC,QACJ,CAEA,MAAM2oB,QAAmB3Y,EAAG+R,SAASoB,EAAQhZ,MACvCnK,EAAUqI,EAAuB8B,KAAMua,GAAyC,IAAKO,IAA2D3c,KAAK6B,KAAMwe,GAEjK,GADAxe,KAAK0c,YAAY,CAAE9mB,OAAM2oB,eAAc1oB,YACnCmoB,EACA,MAER,CACJ,CAEJ,EAEJzD,GAA0C,IAAI4B,QAAW3B,GAAgD,WACrG,OAAOtc,EAAuB8B,KAAMua,GAAyC,IAAKE,IAA+Ctc,KAAK6B,MAAMnK,SAAW,IAC3J,EAAG4kB,GAAgD,WAC/C,IAAI3nB,EAAIkN,KAAK5C,SAAS3K,OACtB,KAAOK,KAAM,GAAG,CACZ,MAAMkK,EAAUgD,KAAK5C,SAAStK,GAC9B,GAAI0mB,GAAmBxc,GAAU,CAO7B,MALY,IACLA,EACHnH,QAASmH,EAAQnH,SAAW,KAC5BojB,QAASjc,EAAQic,SAAW,KAGpC,CACJ,CACA,MAAM,IAAIvZ,EAAY,6EAC1B,EAAGgb,GAAyD,WACxD,IAAK,IAAI5nB,EAAIkN,KAAK5C,SAAS3K,OAAS,EAAGK,GAAK,EAAGA,IAAK,CAChD,MAAMkK,EAAUgD,KAAK5C,SAAStK,GAC9B,GAAI0mB,GAAmBxc,IAAYA,GAASsb,YAAY7lB,OACpD,OAAOuK,EAAQsb,WAAW1P,QAAQhH,GAAiB,aAAXA,EAAEvJ,OAAqBomB,IAAG,IAAK7G,QAE/E,CAEJ,EAAG+C,GAA+D,WAC9D,IAAK,IAAI7nB,EAAIkN,KAAK5C,SAAS3K,OAAS,EAAGK,GAAK,EAAGA,IAAK,CAChD,MAAMkK,EAAUgD,KAAK5C,SAAStK,GAC9B,GAAI2mB,GAAczc,IACK,MAAnBA,EAAQnH,SACmB,iBAApBmH,EAAQnH,SACfmK,KAAK5C,SAASic,MAAMzX,GAAiB,cAAXA,EAAEhM,MACxBgM,EAAE0W,YAAYe,MAAMqF,GAAiB,aAAXA,EAAErmB,MAAuBqmB,EAAErpB,KAAO2H,EAAQuhB,iBACxE,OAAOvhB,EAAQnH,OAEvB,CAEJ,EAAG+kB,GAAoD,WACnD,MAAM+D,EAAQ,CACVC,kBAAmB,EACnBC,cAAe,EACfC,aAAc,GAElB,IAAK,MAAMxB,MAAEA,KAAWtd,KAAKuc,iBACrBe,IACAqB,EAAMC,mBAAqBtB,EAAMsB,kBACjCD,EAAME,eAAiBvB,EAAMuB,cAC7BF,EAAMG,cAAgBxB,EAAMwB,cAGpC,OAAOH,CACX,EAAG9D,GAA+C,SAAsDtE,GACpG,GAAgB,MAAZA,EAAOwI,GAAaxI,EAAOwI,EAAI,EAC/B,MAAM,IAAIrf,EAAY,+HAE9B,EAAGob,GAA4D,SAAmE0D,GAC9H,MAA8B,iBAAfA,EAA0BA,OACpBtd,IAAfsd,EAA2B,YACvBllB,KAAKyD,UAAUyhB,EAC7B,EE3RO,MAAMQ,WAA6B1C,GACtC,eAAO2C,CAAStS,EAAQ4J,EAAQzhB,GAC5B,MAAMoqB,EAAS,IAAIF,GACbjV,EAAO,IACNjV,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,aAGjE,OADAqf,EAAOhE,MAAK,IAAMgE,EAAOrB,UAAUlR,EAAQ4J,EAAQxM,KAC5CmV,CACX,CACA,WAAAxC,CAAY1f,EAAS2f,GAAO,GACxB7c,MAAM4c,YAAY1f,EAAS2f,GACvBnD,GAAmBxc,IAAYA,EAAQnH,SACvCmK,KAAKqb,MAAM,UAAWre,EAAQnH,QAEtC,ECjBJ,MAcMspB,GAdM,EAcNA,GAbM,EAaNA,GAZM,EAYNA,GAXM,EAWNA,GAVO,GAUPA,GATO,GASPA,GARM,GAQNA,GAPW,IAOXA,GANiB,IAMjBA,GADMC,IAkBZ,MAAMC,WAAoBhgB,OAE1B,MAAMigB,WAAsBjgB,OAmB5B,MAAMkgB,GAAa,CAACC,EAAYC,KAC5B,MAAMhtB,EAAS+sB,EAAW/sB,OAC1B,IAAIyC,EAAQ,EACZ,MAAMwqB,EAAmBrf,IACrB,MAAM,IAAIgf,GAAY,GAAGhf,iBAAmBnL,IAAQ,EAElDyqB,EAAuBtf,IACzB,MAAM,IAAIif,GAAc,GAAGjf,iBAAmBnL,IAAQ,EAEpD0qB,EAAW,KACbC,IACI3qB,GAASzC,GACTitB,EAAgB,2BACM,MAAtBF,EAAWtqB,GACJ4qB,IACe,MAAtBN,EAAWtqB,GACJ6qB,IACe,MAAtBP,EAAWtqB,GACJ8qB,IACoC,SAA3CR,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAaM,GAAShtB,EAASyC,EAAQ,GAAK,OAAO4Z,WAAW0Q,EAAWzP,UAAU7a,KACpFA,GAAS,EACF,MAEoC,SAA3CsqB,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAaM,GAAShtB,EAASyC,EAAQ,GAAK,OAAO4Z,WAAW0Q,EAAWzP,UAAU7a,KACpFA,GAAS,GACF,GAEoC,UAA3CsqB,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAaM,GAAShtB,EAASyC,EAAQ,GAAK,QAAQ4Z,WAAW0Q,EAAWzP,UAAU7a,KACrFA,GAAS,GACF,GAEoC,aAA3CsqB,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAiBM,GAAShtB,EAASyC,EAAQ,GAAK,WAAW4Z,WAAW0Q,EAAWzP,UAAU7a,KAC5FA,GAAS,EACF+qB,KAEoC,cAA3CT,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAuBM,GACpB,EAAIhtB,EAASyC,GACbzC,EAASyC,EAAQ,GACjB,YAAY4Z,WAAW0Q,EAAWzP,UAAU7a,KAChDA,GAAS,GACD+qB,KAEmC,QAA3CT,EAAWzP,UAAU7a,EAAOA,EAAQ,IACnCiqB,GAAYM,GAAShtB,EAASyC,EAAQ,GAAK,MAAM4Z,WAAW0Q,EAAWzP,UAAU7a,KAClFA,GAAS,EACFgrB,KAEJC,KAELL,EAAW,KACb,MAAM/b,EAAQ7O,EACd,IAAIsS,GAAS,EAEb,IADAtS,IACOA,EAAQzC,IAAiC,MAAtB+sB,EAAWtqB,IAAmBsS,GAAoC,OAA1BgY,EAAWtqB,EAAQ,KACjFsS,EAA+B,OAAtBgY,EAAWtqB,KAAmBsS,EACvCtS,IAEJ,GAAgC,KAA5BsqB,EAAW1X,OAAO5S,GAClB,IACI,OAAOoE,KAAKC,MAAMimB,EAAWzP,UAAUhM,IAAS7O,EAAQmB,OAAOmR,IACnE,CACA,MAAOzV,GACH4tB,EAAoBzgB,OAAOnN,GAC/B,MAEC,GAAIotB,GAAYM,EACjB,IACI,OAAOnmB,KAAKC,MAAMimB,EAAWzP,UAAUhM,EAAO7O,EAAQmB,OAAOmR,IAAW,IAC5E,CACA,MAAOzV,GAEH,OAAOuH,KAAKC,MAAMimB,EAAWzP,UAAUhM,EAAOyb,EAAWY,YAAY,OAAS,IAClF,CAEJV,EAAgB,8BAA8B,EAE5CK,EAAW,KACb7qB,IACA2qB,IACA,MAAMnsB,EAAM,CAAA,EACZ,IACI,KAA6B,MAAtB8rB,EAAWtqB,IAAgB,CAE9B,GADA2qB,IACI3qB,GAASzC,GAAU0sB,GAAYM,EAC/B,OAAO/rB,EACX,MAAMoG,EAAMgmB,IACZD,IACA3qB,IACA,IACI,MAAMtD,EAAQguB,IACdtgB,OAAO2R,eAAevd,EAAKoG,EAAK,CAAElI,QAAOyuB,UAAU,EAAMnP,YAAY,EAAMoP,cAAc,GAC7F,CACA,MAAOvuB,GACH,GAAIotB,GAAYM,EACZ,OAAO/rB,EAEP,MAAM3B,CACd,CACA8tB,IAC0B,MAAtBL,EAAWtqB,IACXA,GACR,CACJ,CACA,MAAOnD,GACH,GAAIotB,GAAYM,EACZ,OAAO/rB,EAEPgsB,EAAgB,gCACxB,CAEA,OADAxqB,IACOxB,CAAG,EAERssB,EAAW,KACb9qB,IACA,MAAM5B,EAAM,GACZ,IACI,KAA6B,MAAtBksB,EAAWtqB,IACd5B,EAAIP,KAAK6sB,KACTC,IAC0B,MAAtBL,EAAWtqB,IACXA,GAGZ,CACA,MAAOnD,GACH,GAAIotB,GAAYM,EACZ,OAAOnsB,EAEXosB,EAAgB,+BACpB,CAEA,OADAxqB,IACO5B,CAAG,EAER6sB,EAAW,KACb,GAAc,IAAVjrB,EAAa,CACM,MAAfsqB,GAAsBL,GAAYM,GAClCC,EAAgB,wBACpB,IACI,OAAOpmB,KAAKC,MAAMimB,EACtB,CACA,MAAOztB,GACH,GAAIotB,GAAYM,EACZ,IACI,MAAI,MAAQD,EAAWA,EAAW/sB,OAAS,GAChC6G,KAAKC,MAAMimB,EAAWzP,UAAU,EAAGyP,EAAWY,YAAY,OAC9D9mB,KAAKC,MAAMimB,EAAWzP,UAAU,EAAGyP,EAAWY,YAAY,MACrE,CACA,MAAOruB,GAAK,CAEhB4tB,EAAoBzgB,OAAOnN,GAC/B,CACJ,CACA,MAAMgS,EAAQ7O,EAGd,IAF0B,MAAtBsqB,EAAWtqB,IACXA,IACGsqB,EAAWtqB,KAAW,MAAMiK,SAASqgB,EAAWtqB,KACnDA,IACAA,GAASzC,GAAY0sB,GAAYM,GACjCC,EAAgB,+BACpB,IACI,OAAOpmB,KAAKC,MAAMimB,EAAWzP,UAAUhM,EAAO7O,GAClD,CACA,MAAOnD,GACwC,MAAvCytB,EAAWzP,UAAUhM,EAAO7O,IAAkBiqB,GAAYM,GAC1DC,EAAgB,wBACpB,IACI,OAAOpmB,KAAKC,MAAMimB,EAAWzP,UAAUhM,EAAOyb,EAAWY,YAAY,MACzE,CACA,MAAOruB,GACH4tB,EAAoBzgB,OAAOnN,GAC/B,CACJ,GAEE8tB,EAAY,KACd,KAAO3qB,EAAQzC,GAAU,UAAU0M,SAASqgB,EAAWtqB,KACnDA,GACJ,EAEJ,OAAO0qB,GAAU,EAGfW,GAAgBtrB,GAnMtB,SAAmBuqB,EAAYgB,EAAerB,IAC1C,GAA0B,iBAAfK,EACP,MAAM,IAAIxhB,UAAU,6BAA6BwhB,GAErD,IAAKA,EAAW9qB,OACZ,MAAM,IAAI2K,MAAM,GAAGmgB,cAEvB,OAAOD,GAAWC,EAAW9qB,OAAQ8rB,EACzC,CA2LgCC,CAAUxrB,EAAOkqB,GAAYA,IC9O7D,IAAIuB,GAAiCC,GAA8BC,GAAyCC,GAAqDC,GAAoCC,GAA2CC,GAAgCC,GAA6CC,GAA6CC,GAAkCC,GAAsDC,GAO3b,MAAMC,WAA6BhF,GACtC,WAAA1c,CAAY2W,GACRzW,QACA4gB,GAAgC1F,IAAIhb,MACpC2gB,GAA6B1iB,IAAI+B,UAAM,GACvC4gB,GAAwC3iB,IAAI+B,UAAM,GAClD6gB,GAAoD5iB,IAAI+B,UAAM,GAC9DtC,EAAuBsC,KAAM2gB,GAA8BpK,GAC3D7Y,EAAuBsC,KAAM4gB,GAAyC,GAC1E,CACA,iCAAIW,GACA,OAAOrjB,EAAuB8B,KAAM6gB,GAAqD,IAC7F,CAQA,yBAAO5R,CAAmB1K,GACtB,MAAM2a,EAAS,IAAIoC,GAAqB,MAExC,OADApC,EAAOhE,MAAK,IAAMgE,EAAOsC,oBAAoBjd,KACtC2a,CACX,CACA,2BAAOuC,CAAqB9U,EAAQ4J,EAAQzhB,GACxC,MAAMoqB,EAAS,IAAIoC,GAAqB/K,GAExC,OADA2I,EAAOhE,MAAK,IAAMgE,EAAOtB,mBAAmBjR,EAAQ,IAAK4J,EAAQhS,QAAQ,GAAQ,IAAKzP,EAAS+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,cACrJqf,CACX,CACA,2BAAM3B,CAAsB5Q,EAAQ4J,EAAQzhB,GACxCgL,MAAMyd,sBACN,MAAMC,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3DnQ,EAAuB8B,KAAM0gB,GAAiC,IAAKI,IAAoC3iB,KAAK6B,MAC5G,MAAMuE,QAAeoI,EAAO+Q,KAAKC,YAAYxH,OAAO,IAAKI,EAAQhS,QAAQ,GAAQ,IAAKzP,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,SACvHxd,KAAKsb,aACL,UAAW,MAAMxQ,KAASvG,EACtBrG,EAAuB8B,KAAM0gB,GAAiC,IAAKM,IAAgC7iB,KAAK6B,KAAM8K,GAElH,GAAIvG,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKwc,mBAAmBte,EAAuB8B,KAAM0gB,GAAiC,IAAKS,IAAkChjB,KAAK6B,MAC7I,CACA,yBAAMwhB,CAAoBtS,EAAgBpa,GACtC,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3DnQ,EAAuB8B,KAAM0gB,GAAiC,IAAKI,IAAoC3iB,KAAK6B,MAC5GA,KAAKsb,aACL,MAAM/W,EAASyJ,GAAOiB,mBAAmBC,EAAgBlP,KAAKiE,YAC9D,IAAIyd,EACJ,UAAW,MAAM5W,KAASvG,EAClBmd,GAAUA,IAAW5W,EAAMzV,IAE3B2K,KAAKwc,mBAAmBte,EAAuB8B,KAAM0gB,GAAiC,IAAKS,IAAkChjB,KAAK6B,OAEtI9B,EAAuB8B,KAAM0gB,GAAiC,IAAKM,IAAgC7iB,KAAK6B,KAAM8K,GAC9G4W,EAAS5W,EAAMzV,GAEnB,GAAIkP,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKwc,mBAAmBte,EAAuB8B,KAAM0gB,GAAiC,IAAKS,IAAkChjB,KAAK6B,MAC7I,CACA,EAAE2gB,GAA+B,IAAI7W,QAAW8W,GAA0C,IAAI9W,QAAW+W,GAAsD,IAAI/W,QAAW4W,GAAkC,IAAIvE,QAAW2E,GAAqC,WAC5P9gB,KAAKub,OAET7d,EAAuBsC,KAAM6gB,QAAqD3f,EACtF,EAAG6f,GAA4C,SAAmD5I,GAC9F,IAAIva,EAAQM,EAAuB8B,KAAM4gB,GAAyC,KAAKzI,EAAOjjB,OAC9F,OAAI0I,IAGJA,EAAQ,CACJ+jB,cAAc,EACdC,cAAc,EACdC,uBAAuB,EACvBC,uBAAuB,EACvBC,gBAAiB,IAAI9V,IACrB+V,wBAAyB,MAE7B9jB,EAAuB8B,KAAM4gB,GAAyC,KAAKzI,EAAOjjB,OAAS0I,EACpFA,EACX,EAAGojB,GAAiC,SAAwClW,GACxE,GAAI9K,KAAKub,MACL,OACJ,MAAMtD,EAAa/Z,EAAuB8B,KAAM0gB,GAAiC,IAAKW,IAAgDljB,KAAK6B,KAAM8K,GACjJ9K,KAAKqb,MAAM,QAASvQ,EAAOmN,GAC3B,IAAK,MAAME,KAAUrN,EAAMoN,QAAS,CAChC,MAAM+J,EAAiBhK,EAAWC,QAAQC,EAAOjjB,OACrB,MAAxBijB,EAAO+J,MAAMrsB,SACoB,cAAjCosB,EAAejlB,SAASpH,MACxBqsB,EAAejlB,SAASnH,UACxBmK,KAAKqb,MAAM,UAAWlD,EAAO+J,MAAMrsB,QAASosB,EAAejlB,QAAQnH,SACnEmK,KAAKqb,MAAM,gBAAiB,CACxB6G,MAAO/J,EAAO+J,MAAMrsB,QACpBssB,SAAUF,EAAejlB,QAAQnH,QACjCmjB,OAAQiJ,EAAejlB,QAAQgc,UAGX,MAAxBb,EAAO+J,MAAMjJ,SACoB,cAAjCgJ,EAAejlB,SAASpH,MACxBqsB,EAAejlB,SAASic,SACxBjZ,KAAKqb,MAAM,gBAAiB,CACxB6G,MAAO/J,EAAO+J,MAAMjJ,QACpBkJ,SAAUF,EAAejlB,QAAQic,UAGT,MAA5Bd,EAAOiK,UAAUvsB,SAAoD,cAAjCosB,EAAejlB,SAASpH,MAC5DoK,KAAKqb,MAAM,yBAA0B,CACjCxlB,QAASsiB,EAAOiK,UAAUvsB,QAC1BssB,SAAUF,EAAeG,UAAUvsB,SAAW,KAGtB,MAA5BsiB,EAAOiK,UAAUnJ,SAAoD,cAAjCgJ,EAAejlB,SAASpH,MAC5DoK,KAAKqb,MAAM,yBAA0B,CACjCpC,QAASd,EAAOiK,UAAUnJ,QAC1BkJ,SAAUF,EAAeG,UAAUnJ,SAAW,KAGtD,MAAMrb,EAAQM,EAAuB8B,KAAM0gB,GAAiC,IAAKK,IAA2C5iB,KAAK6B,KAAMiiB,GACnIA,EAAe7J,gBACfla,EAAuB8B,KAAM0gB,GAAiC,IAAKQ,IAA6C/iB,KAAK6B,KAAMiiB,GACtF,MAAjCrkB,EAAMokB,yBACN9jB,EAAuB8B,KAAM0gB,GAAiC,IAAKO,IAA6C9iB,KAAK6B,KAAMiiB,EAAgBrkB,EAAMokB,0BAGzJ,IAAK,MAAMzJ,KAAYJ,EAAO+J,MAAM5J,YAAc,GAC1C1a,EAAMokB,0BAA4BzJ,EAASrjB,QAC3CgJ,EAAuB8B,KAAM0gB,GAAiC,IAAKQ,IAA6C/iB,KAAK6B,KAAMiiB,GAEtF,MAAjCrkB,EAAMokB,yBACN9jB,EAAuB8B,KAAM0gB,GAAiC,IAAKO,IAA6C9iB,KAAK6B,KAAMiiB,EAAgBrkB,EAAMokB,0BAGzJpkB,EAAMokB,wBAA0BzJ,EAASrjB,MAE7C,IAAK,MAAMmtB,KAAiBlK,EAAO+J,MAAM5J,YAAc,GAAI,CACvD,MAAMgK,EAAmBL,EAAejlB,QAAQsb,aAAa+J,EAAcntB,OACtEotB,GAAkBjqB,OAGQ,aAA3BiqB,GAAkBjqB,MAClB2H,KAAKqb,MAAM,sCAAuC,CAC9Cpc,KAAMqjB,EAAiB1K,UAAU3Y,KACjC/J,MAAOmtB,EAAcntB,MACrB2jB,UAAWyJ,EAAiB1K,SAASiB,UACrCF,iBAAkB2J,EAAiB1K,SAASe,iBAC5C4J,gBAAiBF,EAAczK,UAAUiB,WAAa,KAMlE,CACJ,CACJ,EAAGoI,GAA8C,SAAqDgB,EAAgBO,GAElH,GADctkB,EAAuB8B,KAAM0gB,GAAiC,IAAKK,IAA2C5iB,KAAK6B,KAAMiiB,GAC7HF,gBAAgBhkB,IAAIykB,GAE1B,OAEJ,MAAMF,EAAmBL,EAAejlB,QAAQsb,aAAakK,GAC7D,IAAKF,EACD,MAAM,IAAIjjB,MAAM,yBAEpB,IAAKijB,EAAiBjqB,KAClB,MAAM,IAAIgH,MAAM,qCAEpB,GAA8B,aAA1BijB,EAAiBjqB,KAAqB,CACtC,MAAMmgB,EAAYta,EAAuB8B,KAAM2gB,GAA8B,MAAMlI,OAAOC,MAAMf,GAASD,GAA6BC,IAASA,EAAKC,SAAS3Y,OAASqjB,EAAiB1K,SAAS3Y,OAChMe,KAAKqb,MAAM,qCAAsC,CAC7Cpc,KAAMqjB,EAAiB1K,SAAS3Y,KAChC/J,MAAOstB,EACP3J,UAAWyJ,EAAiB1K,SAASiB,UACrCF,iBAAkBZ,GAAmBS,GAAaA,EAAUI,UAAU0J,EAAiB1K,SAASiB,WAC1FL,GAAWZ,SAASkB,OAASxf,KAAKC,MAAM+oB,EAAiB1K,SAASiB,WAC9D,MAElB,MAEgByJ,EAAiBjqB,IAErC,EAAG6oB,GAA8C,SAAqDe,GAClG,MAAMrkB,EAAQM,EAAuB8B,KAAM0gB,GAAiC,IAAKK,IAA2C5iB,KAAK6B,KAAMiiB,GACvI,GAAIA,EAAejlB,QAAQnH,UAAY+H,EAAM+jB,aAAc,CACvD/jB,EAAM+jB,cAAe,EACrB,MAAMc,EAAiBvkB,EAAuB8B,KAAM0gB,GAAiC,IAAKU,IAAsDjjB,KAAK6B,MACrJA,KAAKqb,MAAM,eAAgB,CACvBxlB,QAASosB,EAAejlB,QAAQnH,QAChCmjB,OAAQyJ,EAAiBA,EAAe7J,UAAUqJ,EAAejlB,QAAQnH,SAAW,MAE5F,CACIosB,EAAejlB,QAAQic,UAAYrb,EAAMgkB,eACzChkB,EAAMgkB,cAAe,EACrB5hB,KAAKqb,MAAM,eAAgB,CAAEpC,QAASgJ,EAAejlB,QAAQic,WAE7DgJ,EAAeG,UAAUvsB,UAAY+H,EAAMikB,wBAC3CjkB,EAAMikB,uBAAwB,EAC9B7hB,KAAKqb,MAAM,wBAAyB,CAAExlB,QAASosB,EAAeG,SAASvsB,WAEvEosB,EAAeG,UAAUnJ,UAAYrb,EAAMkkB,wBAC3ClkB,EAAMkkB,uBAAwB,EAC9B9hB,KAAKqb,MAAM,wBAAyB,CAAEpC,QAASgJ,EAAeG,SAASnJ,UAE/E,EAAGkI,GAAmC,WAClC,GAAInhB,KAAKub,MACL,MAAM,IAAI7b,EAAY,2CAE1B,MAAMyiB,EAAWjkB,EAAuB8B,KAAM6gB,GAAqD,KACnG,IAAKsB,EACD,MAAM,IAAIziB,EAAY,4CAI1B,OAFAhC,EAAuBsC,KAAM6gB,QAAqD3f,GAClFxD,EAAuBsC,KAAM4gB,GAAyC,IAqK9E,SAAgCuB,EAAU5L,GACtC,MAAMlhB,GAAEA,EAAE6iB,QAAEA,EAAOwK,QAAEA,EAAOnsB,MAAEA,EAAKosB,mBAAEA,KAAuBC,GAAST,EAC/DlK,EAAa,IACZ2K,EACHvtB,KACA6iB,QAASA,EAAQthB,KAAI,EAAGoG,UAASob,gBAAeljB,QAAOktB,cAAaS,MAChE,IAAKzK,EACD,MAAM,IAAI1Y,EAAY,oCAAoCxK,KAE9D,MAAMW,QAAEA,EAAU,KAAIitB,cAAEA,EAAaxK,WAAEA,KAAeyK,GAAgB/lB,EAChEpH,EAAOoH,EAAQpH,KACrB,IAAKA,EACD,MAAM,IAAI8J,EAAY,2BAA2BxK,KAErD,GAAI4tB,EAAe,CACf,MAAQjK,UAAWtV,EAAItE,KAAEA,GAAS6jB,EAClC,GAAY,MAARvf,EACA,MAAM,IAAI7D,EAAY,8CAA8CxK,KAExE,IAAK+J,EACD,MAAM,IAAIS,EAAY,yCAAyCxK,KAEnE,MAAO,IACA2tB,EACH7lB,QAAS,CACLnH,UACAitB,cAAe,CAAEjK,UAAWtV,EAAMtE,QAClCrJ,OACAqjB,QAASjc,EAAQic,SAAW,MAEhCb,gBACAljB,QACAktB,WAER,CACA,OAAI9J,EACO,IACAuK,EACH3tB,QACAkjB,gBACAgK,WACAplB,QAAS,IACF+lB,EACHntB,OACAC,UACAojB,QAASjc,EAAQic,SAAW,KAC5BX,WAAYA,EAAW1hB,KAAI,CAACgmB,EAAW9pB,KACnC,MAAQ8kB,SAAU/R,EAAExN,KAAEA,EAAIhD,GAAEA,KAAO2tB,GAAapG,GACxC/D,UAAWtV,EAAItE,KAAEA,KAASgkB,GAAWpd,GAAM,CAAA,EACnD,GAAU,MAANxQ,EACA,MAAM,IAAIqK,EAAY,mBAAmBxK,iBAAqBpC,UAAUqU,GAAIgb,MAEhF,GAAY,MAAR9pB,EACA,MAAM,IAAIqH,EAAY,mBAAmBxK,iBAAqBpC,YAAYqU,GAAIgb,MAElF,GAAY,MAARljB,EACA,MAAM,IAAIS,EAAY,mBAAmBxK,iBAAqBpC,qBAAqBqU,GAAIgb,MAE3F,GAAY,MAAR5e,EACA,MAAM,IAAI7D,EAAY,mBAAmBxK,iBAAqBpC,0BAA0BqU,GAAIgb,MAEhG,MAAO,IAAKa,EAAU3tB,KAAIgD,OAAMuf,SAAU,IAAKqL,EAAQhkB,OAAM4Z,UAAWtV,GAAQ,MAKzF,IACAsf,EACH7lB,QAAS,IAAK+lB,EAAaltB,UAASD,OAAMqjB,QAASjc,EAAQic,SAAW,MACtEb,gBACAljB,QACAktB,WACH,IAELM,UACAnsB,QACAkS,OAAQ,qBACJka,EAAqB,CAAEA,sBAAuB,IAEtD,OPlaG,SAAkC1K,EAAY1B,GACjD,OAAKA,GAAW6C,GAAsB7C,GAoB/ByB,GAAoBC,EAAY1B,GAnB5B,IACA0B,EACHC,QAASD,EAAWC,QAAQthB,KAAKuhB,IAC7BE,GAAkDF,EAAOnb,QAAQsb,YAC1D,IACAH,EACHnb,QAAS,IACFmb,EAAOnb,QACVgc,OAAQ,QACJb,EAAOnb,QAAQsb,WACf,CACIA,WAAYH,EAAOnb,QAAQsb,iBAE7BpX,OAO9B,CO4YWgiB,CAAyBjL,EAAY1B,EAChD,CApPe4M,CAAuBhB,EAAUjkB,EAAuB8B,KAAM2gB,GAA8B,KACvG,EAAGS,GAAuD,WACtD,MAAMqB,EAAiBvkB,EAAuB8B,KAAM2gB,GAA8B,MAAM7I,gBACxF,OAAID,GAA6B4K,GACtBA,EAEJ,IACX,EAAGpB,GAAiD,SAAwDvW,GACxG,IAAIxV,EAAIG,EAAID,EAAI4tB,EAChB,IAAIjB,EAAWjkB,EAAuB8B,KAAM6gB,GAAqD,KACjG,MAAM3I,QAAEA,KAAY0K,GAAS9X,EACxBqX,EAOD7iB,OAAO+jB,OAAOlB,EAAUS,GANxBT,EAAWzkB,EAAuBsC,KAAM6gB,GAAqD,IACtF+B,EACH1K,QAAS,KAMjB,IAAK,MAAMgK,MAAEA,EAAK9J,cAAEA,EAAaljB,MAAEA,EAAKktB,SAAEA,EAAW,QAASkB,KAAWxY,EAAMoN,QAAS,CACpF,IAAIC,EAASgK,EAASjK,QAAQhjB,GAI9B,GAHKijB,IACDA,EAASgK,EAASjK,QAAQhjB,GAAS,CAAEkjB,gBAAeljB,QAAO8H,QAAS,CAAA,EAAIolB,cAAakB,IAErFlB,EACA,GAAKjK,EAAOiK,SAGP,CACD,MAAMvsB,QAAEA,EAAOojB,QAAEA,KAAY2J,GAASR,EAEtC9iB,OAAO+jB,OAAOlL,EAAOiK,SAAUQ,GAC3B/sB,KACCP,EAAK6iB,EAAOiK,UAAUvsB,UAAYP,EAAGO,QAAU,IAChDsiB,EAAOiK,SAASvsB,QAAQ9C,QAAQ8C,IAEhCojB,KACCxjB,EAAK0iB,EAAOiK,UAAUnJ,UAAYxjB,EAAGwjB,QAAU,IAChDd,EAAOiK,SAASnJ,QAAQlmB,QAAQkmB,GAExC,MAdId,EAAOiK,SAAW9iB,OAAO+jB,OAAO,CAAA,EAAIjB,GAgB5C,GAAIhK,IACAD,EAAOC,cAAgBA,EACnBla,EAAuB8B,KAAM2gB,GAA8B,MAAQvH,GAAsBlb,EAAuB8B,KAAM2gB,GAA8B,OAAO,CAC3J,GAAsB,WAAlBvI,EACA,MAAM,IAAIhX,EAEd,GAAsB,mBAAlBgX,EACA,MAAM,IAAI/W,CAElB,CAGJ,GADA/B,OAAO+jB,OAAOlL,EAAQmL,IACjBpB,EACD,SACJ,MAAMrsB,QAAEA,EAAOojB,QAAEA,EAAO6J,cAAEA,EAAaltB,KAAEA,EAAI0iB,WAAEA,KAAesK,GAASV,EA2BvE,GAzBA5iB,OAAO+jB,OAAOlL,EAAOnb,QAAS4lB,GAC1B3J,IACAd,EAAOnb,QAAQic,SAAWd,EAAOnb,QAAQic,SAAW,IAAMA,GAE1DrjB,IACAuiB,EAAOnb,QAAQpH,KAAOA,GACtBktB,IACK3K,EAAOnb,QAAQ8lB,eAIZA,EAAc7jB,OACdkZ,EAAOnb,QAAQ8lB,cAAc7jB,KAAO6jB,EAAc7jB,MAClD6jB,EAAcjK,aACbrjB,EAAK2iB,EAAOnb,QAAQ8lB,eAAejK,YAAcrjB,EAAGqjB,UAAY,IACjEV,EAAOnb,QAAQ8lB,cAAcjK,WAAaiK,EAAcjK,YAP5DV,EAAOnb,QAAQ8lB,cAAgBA,GAWnCjtB,IACAsiB,EAAOnb,QAAQnH,SAAWsiB,EAAOnb,QAAQnH,SAAW,IAAMA,GACrDsiB,EAAOnb,QAAQic,SAAW/a,EAAuB8B,KAAM0gB,GAAiC,IAAKU,IAAsDjjB,KAAK6B,QACzJmY,EAAOnb,QAAQgc,OAASuH,GAAapI,EAAOnb,QAAQnH,WAGxDyiB,EAAY,CACPH,EAAOnb,QAAQsb,aAChBH,EAAOnb,QAAQsb,WAAa,IAChC,IAAK,MAAMpjB,MAAEA,EAAKG,GAAEA,EAAEgD,KAAEA,EAAMuf,SAAU/R,KAAO+c,KAAUtK,EAAY,CACjE,MAAMsE,GAAcwG,EAAKjL,EAAOnb,QAAQsb,YAAYpjB,KAAWkuB,EAAGluB,GAAS,CAAA,GAC3EoK,OAAO+jB,OAAOzG,EAAWgG,GACrBvtB,IACAunB,EAAUvnB,GAAKA,GACfgD,IACAukB,EAAUvkB,KAAOA,GACjBwN,IACA+W,EAAUhF,WAAagF,EAAUhF,SAAW,CAAE3Y,KAAM4G,EAAG5G,MAAQ,GAAI4Z,UAAW,MAC9EhT,GAAI5G,OACJ2d,EAAUhF,SAAS3Y,KAAO4G,EAAG5G,MAC7B4G,GAAIgT,YACJ+D,EAAUhF,SAASiB,WAAahT,EAAGgT,UAC/BM,GAAoBjb,EAAuB8B,KAAM2gB,GAA8B,KAAM/D,KACrFA,EAAUhF,SAASe,iBAAmB4H,GAAa3D,EAAUhF,SAASiB,YAGlF,CACJ,CACJ,CACA,OAAOsJ,CACX,EAAGve,OAAOC,kBACN,MAAM0f,EAAY,GACZC,EAAY,GAClB,IAAItxB,GAAO,EA+BX,OA9BA8N,KAAK0b,GAAG,SAAU5Q,IACd,MAAMtG,EAASgf,EAAU/T,QACrBjL,EACAA,EAAO/S,QAAQqZ,GAGfyY,EAAUxwB,KAAK+X,EACnB,IAEJ9K,KAAK0b,GAAG,OAAO,KACXxpB,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO/S,aAAQyP,GAEnBsiB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAEjB,CACHX,KAAMqc,UACF,IAAKoV,EAAU9wB,OACX,OAAIP,EACO,CAAEN,WAAOsP,EAAWhP,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW8xB,EAAUzwB,KAAK,CAAEtB,UAASC,aAAWS,MAAM2Y,GAAWA,EAAQ,CAAElZ,MAAOkZ,EAAO5Y,MAAM,GAAU,CAAEN,WAAOsP,EAAWhP,MAAM,KAGpK,MAAO,CAAEN,MADK2xB,EAAU9T,QACDvd,MAAM,EAAO,EAExCmS,OAAQ8J,UACJnO,KAAKqO,QACE,CAAEzc,WAAOsP,EAAWhP,MAAM,IAG7C,CACA,gBAAAwd,GAEI,OADe,IAAI1B,GAAOhO,KAAK4D,OAAOC,eAAerF,KAAKwB,MAAOA,KAAKiE,YACxDyL,kBAClB,EAmFJ,SAASvI,GAAIvF,GACT,OAAOtI,KAAKyD,UAAU6E,EAC1B,CC7dO,MAAM6hB,WAAsCnC,GAC/C,yBAAOrS,CAAmB1K,GACtB,MAAM2a,EAAS,IAAIuE,GAA8B,MAEjD,OADAvE,EAAOhE,MAAK,IAAMgE,EAAOsC,oBAAoBjd,KACtC2a,CACX,CACA,eAAOD,CAAStS,EAAQ4J,EAAQzhB,GAC5B,MAAMoqB,EAAS,IAAIuE,GAEnBlN,GACMxM,EAAO,IACNjV,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,aAGjE,OADAqf,EAAOhE,MAAK,IAAMgE,EAAOrB,UAAUlR,EAAQ4J,EAAQxM,KAC5CmV,CACX,SCPG,cAA0BrJ,GAC7B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK5C,SAAW,IAAIsmB,GAAqB1jB,KAAK8V,QAClD,CACA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,oBAAqB,CAAE7e,UAAShQ,EAASyP,OAAQO,EAAKP,SAAU,GAC7F,CAWA,QAAAqf,CAASpM,EAAc1iB,GACnB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,qBAAqByD,IAAgB1iB,EACtE,CAcA,MAAA+uB,CAAOrM,EAAc1S,EAAMhQ,GACvB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,qBAAqByD,IAAgB,CAAE1S,UAAShQ,GAClF,CAaA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,oBAAmB,GAAgB,CAAEpa,WAAUvI,GAClF,CAWA,OAAO0iB,EAAc1iB,GACjB,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,qBAAqByD,IAAgB1iB,EACzE,CACA,KAAAyE,CAAMuL,EAAMhQ,GAER,OT0ED,SAA4B2jB,GAC/B,IAAK,MAAMd,KAAQc,GAAS,GAAI,CAC5B,GAAkB,aAAdd,EAAKtf,KACL,MAAM,IAAIqH,EAAY,2EAA2EiY,EAAKtf,UAE1G,IAA6B,IAAzBsf,EAAKC,SAASkB,OACd,MAAM,IAAIpZ,EAAY,SAASiY,EAAKC,SAAS3Y,iGAErD,CACJ,CSpFQ8kB,CAAmBjf,EAAK2T,OACjBzY,KAAK8V,QAAQ4H,KAAKC,YACpBxH,OAAOrR,EAAM,IACXhQ,EACH+K,QAAS,IACF/K,GAAS+K,QACZ,4BAA6B,4BAGhCyR,aAAa2G,GAAeD,GAAoBC,EAAYnT,IACrE,CACA,QAAAma,CAASna,EAAMhQ,GACX,OAAIgQ,EAAKP,OACEkf,GAA8BxE,SAASjf,KAAK8V,QAAShR,EAAMhQ,GAE/DkqB,GAAqBC,SAASjf,KAAK8V,QAAShR,EAAMhQ,EAC7D,CAIA,MAAAyP,CAAOO,EAAMhQ,GACT,OAAOwsB,GAAqBG,qBAAqBzhB,KAAK8V,QAAShR,EAAMhQ,EACzE,GAMJkvB,GAAYC,SAAWA,GCpGhB,MAAMC,WAAarO,GACtB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK2d,YAAc,IAAIwG,GAA2BnkB,KAAK8V,QAC3D,EAEJoO,GAAKF,YAAcA,GCRnB,MAAMI,GAA+CxgB,OAAO,gCAC5D,SAAUygB,GAAexkB,GACrB,IAAKA,EACD,OACJ,GAAIukB,MAAgCvkB,EAAS,CACzC,MAAMyJ,OAAEA,EAAMgb,MAAEA,GAAUzkB,QACnByJ,EAAOoE,UACd,IAAK,MAAMzO,KAAQqlB,OACT,CAACrlB,EAAM,MAEjB,MACJ,CACA,IACI0E,EADA4gB,GAAc,EAEd1kB,aAAmB4N,QACnB9J,EAAO9D,EAAQ6N,UAEVhM,EAAgB7B,GACrB8D,EAAO9D,GAGP0kB,GAAc,EACd5gB,EAAOrE,OAAOoO,QAAQ7N,GAAW,CAAA,IAErC,IAAK,IAAIxE,KAAOsI,EAAM,CAClB,MAAM1E,EAAO5D,EAAI,GACjB,GAAoB,iBAAT4D,EACP,MAAM,IAAIjB,UAAU,uCACxB,MAAMsL,EAAS5H,EAAgBrG,EAAI,IAAMA,EAAI,GAAK,CAACA,EAAI,IACvD,IAAImpB,GAAW,EACf,IAAK,MAAM5yB,KAAS0X,OACFpI,IAAVtP,IAIA2yB,IAAgBC,IAChBA,GAAW,OACL,CAACvlB,EAAM,YAEX,CAACA,EAAMrN,GAErB,CACJ,CACO,MAAM6yB,GAAgBC,IACzB,MAAMC,EAAgB,IAAIlX,QACpBmX,EAAc,IAAI3Y,IACxB,IAAK,MAAMpM,KAAW6kB,EAAY,CAC9B,MAAMG,EAAc,IAAI5Y,IACxB,IAAK,MAAOhN,EAAMrN,KAAUyyB,GAAexkB,GAAU,CACjD,MAAMilB,EAAY7lB,EAAKxK,cAClBowB,EAAY9mB,IAAI+mB,KACjBH,EAAcb,OAAO7kB,GACrB4lB,EAAY7J,IAAI8J,IAEN,OAAVlzB,GACA+yB,EAAcb,OAAO7kB,GACrB2lB,EAAY5J,IAAI8J,KAGhBH,EAAc5P,OAAO9V,EAAMrN,GAC3BgzB,EAAYd,OAAOgB,GAE3B,CACJ,CACA,MAAO,CAAEV,CAACA,KAA+B,EAAM9a,OAAQqb,EAAeL,MAAOM,EAAa,EC/DvF,MAAMG,WAAelP,GAgBxB,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,gBAAiB,CACtC7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,4BAA8BlwB,GAAS+K,UACxE4Q,kBAAkB,GAE1B,ECvBG,MAAMwU,WAAuBpP,GAChC,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,wBAAyBzP,GAA4B,CAC1EpP,UACGhQ,EACHyP,OAAQO,EAAKP,SAAU,EACvB2gB,WAAY,CAAE3uB,MAAOuO,EAAKvO,QAC3ByJ,KAAK8V,SACZ,ECRG,MAAMqP,WAAqBtP,GAC9B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,sBAAuBzP,GAA4B,CAAEpP,UAAShQ,EAASowB,WAAY,CAAE3uB,MAAOuO,EAAKvO,QAAWyJ,KAAK8V,SAC9I,ECEG,MAAMsP,WAAcvP,GACvB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKqlB,eAAiB,IAAIC,GAAiCtlB,KAAK8V,SAChE9V,KAAKulB,aAAe,IAAIC,GAA6BxlB,KAAK8V,SAC1D9V,KAAKylB,OAAS,IAAIC,GAAiB1lB,KAAK8V,QAC5C,EAEJsP,GAAMH,eAAiBA,GACvBG,GAAMD,aAAeA,GACrBC,GAAML,OAASA,GCdR,MAAMY,WAAgB9P,GAIzB,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,WAAY,CAAE7e,UAAShQ,GACpD,CAIA,QAAA8uB,CAASgC,EAAS9wB,GACd,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,YAAY6R,IAAW9wB,EACxD,CAIA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,WAAU,GAAgB,CAAEpa,WAAUvI,GACzE,CAMA,MAAAsP,CAAOwhB,EAAS9wB,GACZ,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAY6R,WAAkB9wB,EAChE,ECzBG,MAAM+wB,WAAmBhQ,GAW5B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,cAAe,CACpC7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAWA,QAAA+jB,CAASkC,EAAahxB,GAClB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,eAAe+R,IAAe,IACpDhxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAWA,MAAAgkB,CAAOiC,EAAahhB,EAAMhQ,GACtB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,eAAe+R,IAAe,CACxDhhB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAYA,IAAA0X,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,cAAa,GAAgB,CACxDpa,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAUA,OAAOimB,EAAahxB,GAChB,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,eAAe+R,IAAe,IACvDhxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,ECrFG,MAAMkmB,WAAiBlQ,GAgB1B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,qBAAsB,CAC3C7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,ECtBG,MAAMmmB,WAA8BnQ,GAgBvC,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,mCAAoC,CACzD7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,SChBG,cAAuBgW,GAC1B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKimB,SAAW,IAAIC,GAAqBlmB,KAAK8V,SAC9C9V,KAAKmmB,sBAAwB,IAAIC,GAA+CpmB,KAAK8V,QACzF,GAEJuQ,GAASN,SAAWA,GACpBM,GAASL,sBAAwBA,GCT1B,MAAM/B,WAAiBpO,GAM1B,MAAAM,CAAOmQ,EAAUxhB,EAAMhQ,GACnB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYuS,aAAqB,CAC3DxhB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,QAAA+jB,CAAS2C,EAAWhQ,EAAQzhB,GACxB,MAAM0xB,UAAEA,GAAcjQ,EACtB,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,YAAYyS,cAAsBD,IAAa,IACrEzxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,MAAAgkB,CAAO0C,EAAWhQ,EAAQzhB,GACtB,MAAM0xB,UAAEA,KAAc1hB,GAASyR,EAC/B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYyS,cAAsBD,IAAa,CACzEzhB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,IAAA0X,CAAK+O,EAAUjpB,EAAQ,CAAA,EAAIvI,GACvB,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,YAAYuS,aAAmB,GAAgB,CAC/EjpB,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,OAAO0mB,EAAWhQ,EAAQzhB,GACtB,MAAM0xB,UAAEA,GAAcjQ,EACtB,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,YAAYyS,cAAsBD,IAAa,IACxEzxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,EC7DG,MAAM4mB,WAAc5Q,GAMvB,QAAA+N,CAAS8C,EAAQnQ,EAAQzhB,GACrB,MAAM0xB,UAAEA,EAASG,OAAEA,KAAWtpB,GAAUkZ,EACxC,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,YAAYyS,UAAkBG,WAAgBD,IAAU,CACjFrpB,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,IAAA0X,CAAKqP,EAAOrQ,EAAQzhB,GAChB,MAAM0xB,UAAEA,KAAcnpB,GAAUkZ,EAChC,OAAOvW,KAAK8V,QAAQ2B,WAAW1D,EAAK,YAAYyS,UAAkBI,UAAa,GAAgB,CAC3FvpB,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,ECGG,MC7BMgnB,GAAWC,QACc,IAAvBxoB,WAAWgE,QACXhE,WAAWgE,QAAQwkB,MAAMA,IAAMpyB,aAAUwM,OAErB,IAApB5C,WAAW6D,KACX7D,WAAW6D,KAAK2kB,KAAK5tB,MAAM4tB,IAAMpyB,YAD5C,ECZJ,IAAIqyB,GAA4BzxB,GAAI0xB,GAAyBC,GAAmCC,GAAmCC,GAAkCC,GAA2BC,GAAsCC,GAAiCC,GAAuCC,GAAkCC,GAA+BC,GAAqCC,GAAyCC,GAA2BC,GAA6BC,GAAgCC,GAAgCC,GAA8BC,GAAoCC,GAAoCC,GAAoCC,GAMxrB,MAAMC,WAAwBtN,GACjC,WAAAnb,GACIE,SAAS+Y,WACTkO,GAA2B/L,IAAIhb,MAE/BgnB,GAAwB/oB,IAAI+B,KAAM,IAGlCinB,GAAkChpB,IAAI+B,KAAM,IAC5CknB,GAAkCjpB,IAAI+B,KAAM,IAC5CmnB,GAAiClpB,IAAI+B,UAAM,GAC3ConB,GAA0BnpB,IAAI+B,UAAM,GACpCqnB,GAAqCppB,IAAI+B,UAAM,GAC/CsnB,GAAgCrpB,IAAI+B,UAAM,GAC1CunB,GAAsCtpB,IAAI+B,UAAM,GAChDwnB,GAAiCvpB,IAAI+B,UAAM,GAE3CynB,GAA8BxpB,IAAI+B,UAAM,GACxC0nB,GAAoCzpB,IAAI+B,UAAM,GAC9C2nB,GAAwC1pB,IAAI+B,UAAM,EACtD,CACA,EAAEgnB,GAA0B,IAAIld,QAAWmd,GAAoC,IAAInd,QAAWod,GAAoC,IAAIpd,QAAWqd,GAAmC,IAAIrd,QAAWsd,GAA4B,IAAItd,QAAWud,GAAuC,IAAIvd,QAAWwd,GAAkC,IAAIxd,QAAWyd,GAAwC,IAAIzd,QAAW0d,GAAmC,IAAI1d,QAAW2d,GAAgC,IAAI3d,QAAW4d,GAAsC,IAAI5d,QAAW6d,GAA0C,IAAI7d,QAAWid,GAA6B,IAAI5K,QAAWvY,OAAOC,kBAC1oB,MAAM0f,EAAY,GACZC,EAAY,GAClB,IAAItxB,GAAO,EAgCX,OA9BA8N,KAAK0b,GAAG,SAAU3M,IACd,MAAMvK,EAASgf,EAAU/T,QACrBjL,EACAA,EAAO/S,QAAQsd,GAGfwU,EAAUxwB,KAAKgc,EACnB,IAEJ/O,KAAK0b,GAAG,OAAO,KACXxpB,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO/S,aAAQyP,GAEnBsiB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAEjB,CACHX,KAAMqc,UACF,IAAKoV,EAAU9wB,OACX,OAAIP,EACO,CAAEN,WAAOsP,EAAWhP,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW8xB,EAAUzwB,KAAK,CAAEtB,UAASC,aAAWS,MAAM2Y,GAAWA,EAAQ,CAAElZ,MAAOkZ,EAAO5Y,MAAM,GAAU,CAAEN,WAAOsP,EAAWhP,MAAM,KAGpK,MAAO,CAAEN,MADK2xB,EAAU9T,QACDvd,MAAM,EAAO,EAExCmS,OAAQ8J,UACJnO,KAAKqO,QACE,CAAEzc,WAAOsP,EAAWhP,MAAM,IAG7C,CACA,yBAAO+c,CAAmB1K,GACtB,MAAM2a,EAAS,IAAI5pB,GAEnB,OADA4pB,EAAOhE,MAAK,IAAMgE,EAAOsC,oBAAoBjd,KACtC2a,CACX,CACA,yBAAMsC,CAAoBtS,EAAgBpa,GACtC,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3DrO,KAAKsb,aACL,MAAM/W,EAASyJ,GAAOiB,mBAAmBC,EAAgBlP,KAAKiE,YAC9D,UAAW,MAAM8K,KAASxK,EACtBrG,EAAuB8B,KAAM+mB,GAA4B,IAAKa,IAA2BzpB,KAAK6B,KAAM+O,GAExG,GAAIxK,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKsoB,QAAQpqB,EAAuB8B,KAAM+mB,GAA4B,IAAKc,IAA6B1pB,KAAK6B,MACxH,CACA,gBAAA0P,GAEI,OADe,IAAI1B,GAAOhO,KAAK4D,OAAOC,eAAerF,KAAKwB,MAAOA,KAAKiE,YACxDyL,kBAClB,CACA,gCAAO6Y,CAA0BC,EAAOC,EAAMlS,EAAQzhB,GAClD,MAAMoqB,EAAS,IAAI5pB,GAKnB,OAJA4pB,EAAOhE,MAAK,IAAMgE,EAAOwJ,wBAAwBF,EAAOC,EAAMlS,EAAQ,IAC/DzhB,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,cAE1Dqf,CACX,CACA,gCAAMyJ,CAA2BC,EAAKJ,EAAOjS,EAAQzhB,GACjD,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3D,MAAMvJ,EAAO,IAAKyR,EAAQhS,QAAQ,GAC5BA,QAAeqkB,EAAIC,kBAAkBL,EAAO1jB,EAAM,IACjDhQ,EACH0oB,OAAQxd,KAAKiE,WAAWuZ,SAE5Bxd,KAAKsb,aACL,UAAW,MAAMvM,KAASxK,EACtBrG,EAAuB8B,KAAM+mB,GAA4B,IAAKa,IAA2BzpB,KAAK6B,KAAM+O,GAExG,GAAIxK,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKsoB,QAAQpqB,EAAuB8B,KAAM+mB,GAA4B,IAAKc,IAA6B1pB,KAAK6B,MACxH,CACA,kCAAO8oB,CAA4BvS,EAAQwS,EAAQj0B,GAC/C,MAAMoqB,EAAS,IAAI5pB,GAKnB,OAJA4pB,EAAOhE,MAAK,IAAMgE,EAAO8J,uBAAuBzS,EAAQwS,EAAQ,IACzDj0B,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,cAE1Dqf,CACX,CACA,4BAAO+J,CAAsBC,EAAUT,EAAMlS,EAAQzhB,GACjD,MAAMoqB,EAAS,IAAI5pB,GAKnB,OAJA4pB,EAAOhE,MAAK,IAAMgE,EAAOiK,oBAAoBD,EAAUT,EAAMlS,EAAQ,IAC9DzhB,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,cAE1Dqf,CACX,CACA,YAAAkK,GACI,OAAOlrB,EAAuB8B,KAAMynB,GAA+B,IACvE,CACA,UAAA4B,GACI,OAAOnrB,EAAuB8B,KAAM0nB,GAAqC,IAC7E,CACA,sBAAA4B,GACI,OAAOprB,EAAuB8B,KAAMmnB,GAAkC,IAC1E,CACA,sBAAAoC,GACI,OAAOrrB,EAAuB8B,KAAM2nB,GAAyC,IACjF,CACA,mBAAM6B,GAEF,aADMxpB,KAAK9N,OACJoN,OAAOgK,OAAOpL,EAAuB8B,KAAMinB,GAAmC,KACzF,CACA,mBAAMwC,GAEF,aADMzpB,KAAK9N,OACJoN,OAAOgK,OAAOpL,EAAuB8B,KAAMknB,GAAmC,KACzF,CACA,cAAMwC,GAEF,SADM1pB,KAAK9N,QACNgM,EAAuB8B,KAAMonB,GAA2B,KACzD,MAAM/nB,MAAM,+BAChB,OAAOnB,EAAuB8B,KAAMonB,GAA2B,IACnE,CACA,kCAAMuC,CAA6BZ,EAAQxS,EAAQzhB,GAC/C,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3D,MAAMvJ,EAAO,IAAKyR,EAAQhS,QAAQ,GAC5BA,QAAewkB,EAAOa,aAAa9kB,EAAM,IAAKhQ,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,SACrFxd,KAAKsb,aACL,UAAW,MAAMvM,KAASxK,EACtBrG,EAAuB8B,KAAM+mB,GAA4B,IAAKa,IAA2BzpB,KAAK6B,KAAM+O,GAExG,GAAIxK,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKsoB,QAAQpqB,EAAuB8B,KAAM+mB,GAA4B,IAAKc,IAA6B1pB,KAAK6B,MACxH,CACA,4BAAM6pB,CAAuBjB,EAAKM,EAAU3S,EAAQzhB,GAChD,MAAM0oB,EAAS1oB,GAAS0oB,OACpBA,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3D,MAAMvJ,EAAO,IAAKyR,EAAQhS,QAAQ,GAC5BA,QAAeqkB,EAAIzS,OAAO+S,EAAUpkB,EAAM,IAAKhQ,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,SACtFxd,KAAKsb,aACL,UAAW,MAAMvM,KAASxK,EACtBrG,EAAuB8B,KAAM+mB,GAA4B,IAAKa,IAA2BzpB,KAAK6B,KAAM+O,GAExG,GAAIxK,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAOjB,KAAKsoB,QAAQpqB,EAAuB8B,KAAM+mB,GAA4B,IAAKc,IAA6B1pB,KAAK6B,MACxH,CACA,sBAAO8pB,CAAgB1S,EAAK8K,GACxB,IAAK,MAAOpoB,EAAKiwB,KAAezqB,OAAOoO,QAAQwU,GAAQ,CACnD,IAAK9K,EAAI5R,eAAe1L,GAAM,CAC1Bsd,EAAItd,GAAOiwB,EACX,QACJ,CACA,IAAIC,EAAW5S,EAAItd,GACnB,GAAIkwB,QAKJ,GAAY,UAARlwB,GAA2B,SAARA,EAAvB,CAKA,GAAwB,iBAAbkwB,GAA+C,iBAAfD,EACvCC,GAAYD,OAEX,GAAwB,iBAAbC,GAA+C,iBAAfD,EAC5CC,GAAYD,MAEX,KAAIloB,EAAMmoB,KAAanoB,EAAMkoB,GAG7B,IAAIrzB,MAAM8K,QAAQwoB,IAAatzB,MAAM8K,QAAQuoB,GAAa,CAC3D,GAAIC,EAASC,OAAOroB,GAAmB,iBAANA,GAA+B,iBAANA,IAAiB,CACvEooB,EAASj3B,QAAQg3B,GACjB,QACJ,CACA,IAAK,MAAMG,KAAcH,EAAY,CACjC,IAAKloB,EAAMqoB,GACP,MAAM,IAAI7qB,MAAM,uDAAuD6qB,KAE3E,MAAMh1B,EAAQg1B,EAAkB,MAChC,GAAa,MAATh1B,EAEA,MADApB,QAAQ2E,MAAMyxB,GACR,IAAI7qB,MAAM,0DAEpB,GAAqB,iBAAVnK,EACP,MAAM,IAAImK,MAAM,wEAAwEnK,KAE5F,MAAMi1B,EAAWH,EAAS90B,GACV,MAAZi1B,EACAH,EAASj3B,KAAKm3B,GAGdF,EAAS90B,GAAS8K,KAAK8pB,gBAAgBK,EAAUD,EAEzD,CACA,QACJ,CAEI,MAAM7qB,MAAM,0BAA0BvF,kBAAoBiwB,gBAAyBC,IACvF,CA/BIA,EAAWhqB,KAAK8pB,gBAAgBE,EAAUD,EA+B9C,CACA3S,EAAItd,GAAOkwB,CAzCX,MAFI5S,EAAItd,GAAOiwB,OALX3S,EAAItd,GAAOiwB,CAiDnB,CACA,OAAO3S,CACX,CACA,OAAAkR,CAAQM,GACJ,OAAOA,CACX,CACA,4BAAMI,CAAuBzS,EAAQwS,EAAQj0B,GACzC,aAAakL,KAAK2pB,6BAA6BZ,EAAQxS,EAAQzhB,EACnE,CACA,yBAAMq0B,CAAoBD,EAAUT,EAAMlS,EAAQzhB,GAC9C,aAAakL,KAAK6pB,uBAAuBpB,EAAMS,EAAU3S,EAAQzhB,EACrE,CACA,6BAAM4zB,CAAwBF,EAAOC,EAAMlS,EAAQzhB,GAC/C,aAAakL,KAAK2oB,2BAA2BF,EAAMD,EAAOjS,EAAQzhB,EACtE,EAEJQ,GAAK+yB,GAAiBT,GAA4B,SAAmC7Y,GACjF,IAAI/O,KAAKub,MAIT,OAFA7d,EAAuBsC,KAAMynB,GAA+B1Y,GAC5D7Q,EAAuB8B,KAAM+mB,GAA4B,IAAKiB,IAA8B7pB,KAAK6B,KAAM+O,GAC/FA,EAAMA,OACV,IAAK,iBAED,MACJ,IAAK,qBACL,IAAK,oBACL,IAAK,yBACL,IAAK,6BACL,IAAK,uBACL,IAAK,wBACL,IAAK,oBACL,IAAK,wBACL,IAAK,uBACL,IAAK,qBACD7Q,EAAuB8B,KAAM+mB,GAA4B,IAAKqB,IAA4BjqB,KAAK6B,KAAM+O,GACrG,MACJ,IAAK,0BACL,IAAK,8BACL,IAAK,wBACL,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACD7Q,EAAuB8B,KAAM+mB,GAA4B,IAAKgB,IAAgC5pB,KAAK6B,KAAM+O,GACzG,MACJ,IAAK,yBACL,IAAK,6BACL,IAAK,uBACL,IAAK,2BACL,IAAK,4BACD7Q,EAAuB8B,KAAM+mB,GAA4B,IAAKe,IAAgC3pB,KAAK6B,KAAM+O,GACzG,MACJ,IAAK,QAED,MAAM,IAAI1P,MAAM,uFAI5B,EAAGwoB,GAA8B,WAC7B,GAAI7nB,KAAKub,MACL,MAAM,IAAI7b,EAAY,2CAE1B,IAAKxB,EAAuB8B,KAAMonB,GAA2B,KACzD,MAAM/nB,MAAM,mCAChB,OAAOnB,EAAuB8B,KAAMonB,GAA2B,IACnE,EAAGU,GAAiC,SAAwC/Y,GACxE,MAAOqb,EAAoBC,GAAcnsB,EAAuB8B,KAAM+mB,GAA4B,IAAKmB,IAAoC/pB,KAAK6B,KAAM+O,EAAO7Q,EAAuB8B,KAAMmnB,GAAkC,MAC5NzpB,EAAuBsC,KAAMmnB,GAAkCiD,GAC/DlsB,EAAuB8B,KAAMknB,GAAmC,KAAKkD,EAAmB/0B,IAAM+0B,EAC9F,IAAK,MAAMv0B,KAAWw0B,EAAY,CAC9B,MAAMC,EAAkBF,EAAmBv0B,QAAQA,EAAQX,OAC9B,QAAzBo1B,GAAiBjyB,MACjB2H,KAAKqb,MAAM,cAAeiP,EAAgBx5B,KAElD,CACA,OAAQie,EAAMA,OACV,IAAK,yBACD/O,KAAKqb,MAAM,iBAAkBtM,EAAM7O,MACnC,MACJ,IAAK,6BACD,MACJ,IAAK,uBAED,GADAF,KAAKqb,MAAM,eAAgBtM,EAAM7O,KAAKgiB,MAAOkI,GACzCrb,EAAM7O,KAAKgiB,MAAMrsB,QACjB,IAAK,MAAMA,KAAWkZ,EAAM7O,KAAKgiB,MAAMrsB,QAAS,CAE5C,GAAoB,QAAhBA,EAAQwC,MAAkBxC,EAAQ/E,KAAM,CACxC,IAAIy5B,EAAY10B,EAAQ/E,KACpBqxB,EAAWiI,EAAmBv0B,QAAQA,EAAQX,OAClD,IAAIitB,GAA6B,QAAjBA,EAAS9pB,KAIrB,MAAMgH,MAAM,uEAHZW,KAAKqb,MAAM,YAAakP,EAAWpI,EAASrxB,KAKpD,CACA,GAAI+E,EAAQX,OAASgJ,EAAuB8B,KAAMqnB,GAAsC,KAAM,CAE1F,GAAInpB,EAAuB8B,KAAMsnB,GAAiC,KAC9D,OAAQppB,EAAuB8B,KAAMsnB,GAAiC,KAAKjvB,MACvE,IAAK,OACD2H,KAAKqb,MAAM,WAAYnd,EAAuB8B,KAAMsnB,GAAiC,KAAKx2B,KAAMoN,EAAuB8B,KAAMmnB,GAAkC,MAC/J,MACJ,IAAK,aACDnnB,KAAKqb,MAAM,gBAAiBnd,EAAuB8B,KAAMsnB,GAAiC,KAAKkD,WAAYtsB,EAAuB8B,KAAMmnB,GAAkC,MAItLzpB,EAAuBsC,KAAMqnB,GAAsCxxB,EAAQX,MAC/E,CACAwI,EAAuBsC,KAAMsnB,GAAiC8C,EAAmBv0B,QAAQA,EAAQX,OACrG,CAEJ,MACJ,IAAK,2BACL,IAAK,4BAED,QAAgFgM,IAA5EhD,EAAuB8B,KAAMqnB,GAAsC,KAAoB,CACvF,MAAMoD,EAAiB1b,EAAM7O,KAAKrK,QAAQqI,EAAuB8B,KAAMqnB,GAAsC,MAC7G,GAAIoD,EACA,OAAQA,EAAepyB,MACnB,IAAK,aACD2H,KAAKqb,MAAM,gBAAiBoP,EAAeD,WAAYtsB,EAAuB8B,KAAMmnB,GAAkC,MACtH,MACJ,IAAK,OACDnnB,KAAKqb,MAAM,WAAYoP,EAAe35B,KAAMoN,EAAuB8B,KAAMmnB,GAAkC,MAI3H,CACIjpB,EAAuB8B,KAAMmnB,GAAkC,MAC/DnnB,KAAKqb,MAAM,cAAetM,EAAM7O,MAEpCxC,EAAuBsC,KAAMmnB,QAAkCjmB,GAE3E,EAAG6mB,GAAiC,SAAwChZ,GACxE,MAAM2b,EAAqBxsB,EAAuB8B,KAAM+mB,GAA4B,IAAKkB,IAAoC9pB,KAAK6B,KAAM+O,GAExI,OADArR,EAAuBsC,KAAM2nB,GAAyC+C,GAC9D3b,EAAMA,OACV,IAAK,0BACD/O,KAAKqb,MAAM,iBAAkBtM,EAAM7O,MACnC,MACJ,IAAK,wBACD,MAAMgiB,EAAQnT,EAAM7O,KAAKgiB,MACzB,GAAIA,EAAMyI,cACqB,cAA3BzI,EAAMyI,aAAatyB,MACnB6pB,EAAMyI,aAAarS,YACqB,cAAxCoS,EAAmBC,aAAatyB,KAChC,IAAK,MAAMkgB,KAAY2J,EAAMyI,aAAarS,WAClCC,EAASrjB,OAASgJ,EAAuB8B,KAAMunB,GAAuC,KACtFvnB,KAAKqb,MAAM,gBAAiB9C,EAAUmS,EAAmBC,aAAarS,WAAWC,EAASrjB,SAGtFgJ,EAAuB8B,KAAMwnB,GAAkC,MAC/DxnB,KAAKqb,MAAM,eAAgBnd,EAAuB8B,KAAMwnB,GAAkC,MAE9F9pB,EAAuBsC,KAAMunB,GAAuChP,EAASrjB,OAC7EwI,EAAuBsC,KAAMwnB,GAAkCkD,EAAmBC,aAAarS,WAAWC,EAASrjB,QAC/GgJ,EAAuB8B,KAAMwnB,GAAkC,MAC/DxnB,KAAKqb,MAAM,kBAAmBnd,EAAuB8B,KAAMwnB,GAAkC,OAI7GxnB,KAAKqb,MAAM,eAAgBtM,EAAM7O,KAAKgiB,MAAOwI,GAC7C,MACJ,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACDhtB,EAAuBsC,KAAM2nB,QAAyCzmB,GAElD,cADJ6N,EAAM7O,KAAKyqB,aACftyB,MACJ6F,EAAuB8B,KAAMwnB,GAAkC,OAC/DxnB,KAAKqb,MAAM,eAAgBnd,EAAuB8B,KAAMwnB,GAAkC,MAC1F9pB,EAAuBsC,KAAMwnB,QAAkCtmB,IAGvElB,KAAKqb,MAAM,cAAetM,EAAM7O,KAAMwqB,GAKlD,EAAG1C,GAA+B,SAAsCjZ,GACpE7Q,EAAuB8B,KAAMgnB,GAAyB,KAAKj0B,KAAKgc,GAChE/O,KAAKqb,MAAM,QAAStM,EACxB,EAAGkZ,GAAqC,SAA4ClZ,GAChF,OAAQA,EAAMA,OACV,IAAK,0BAED,OADA7Q,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAAM0Z,EAAM7O,KACrF6O,EAAM7O,KACjB,IAAK,wBACD,IAAIiiB,EAAWjkB,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAC/F,IAAK8sB,EACD,MAAM9iB,MAAM,yDAEhB,IAAIa,EAAO6O,EAAM7O,KACjB,GAAIA,EAAKgiB,MAAO,CACZ,MAAM0I,EAAct1B,GAAGw0B,gBAAgB3H,EAAUjiB,EAAKgiB,OACtDhkB,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAAMu1B,CAC1F,CACA,OAAO1sB,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAC3F,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACL,IAAK,8BACD6I,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAAM0Z,EAAM7O,KAGpG,GAAIhC,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAChF,OAAO6I,EAAuB8B,KAAMinB,GAAmC,KAAKlY,EAAM7O,KAAK7K,IAC3F,MAAM,IAAIgK,MAAM,wBACpB,EAAG6oB,GAAqC,SAA4CnZ,EAAOoT,GACvF,IAAIkI,EAAa,GACjB,OAAQtb,EAAMA,OACV,IAAK,yBAED,MAAO,CAACA,EAAM7O,KAAMmqB,GACxB,IAAK,uBACD,IAAKlI,EACD,MAAM9iB,MAAM,0FAEhB,IAAIa,EAAO6O,EAAM7O,KAEjB,GAAIA,EAAKgiB,MAAMrsB,QACX,IAAK,MAAMg1B,KAAkB3qB,EAAKgiB,MAAMrsB,QACpC,GAAIg1B,EAAe31B,SAASitB,EAAStsB,QAAS,CAC1C,IAAI40B,EAAiBtI,EAAStsB,QAAQg1B,EAAe31B,OACrDitB,EAAStsB,QAAQg1B,EAAe31B,OAASgJ,EAAuB8B,KAAM+mB,GAA4B,IAAKoB,IAAoChqB,KAAK6B,KAAM6qB,EAAgBJ,EAC1K,MAEItI,EAAStsB,QAAQg1B,EAAe31B,OAAS21B,EAEzCR,EAAWt3B,KAAK83B,GAI5B,MAAO,CAAC1I,EAAUkI,GACtB,IAAK,6BACL,IAAK,2BACL,IAAK,4BAED,GAAIlI,EACA,MAAO,CAACA,EAAUkI,GAGlB,MAAMhrB,MAAM,2DAGxB,MAAMA,MAAM,0CAChB,EAAG8oB,GAAqC,SAA4C0C,EAAgBJ,GAChG,OAAOn1B,GAAGw0B,gBAAgBW,EAAgBI,EAC9C,EAAGzC,GAA6B,SAAoCrZ,GAEhE,OADArR,EAAuBsC,KAAM0nB,GAAqC3Y,EAAM7O,MAChE6O,EAAMA,OACV,IAAK,qBAEL,IAAK,oBAEL,IAAK,yBACD,MACJ,IAAK,6BACL,IAAK,uBACL,IAAK,oBACL,IAAK,uBACL,IAAK,qBACL,IAAK,wBACDrR,EAAuBsC,KAAMonB,GAA2BrY,EAAM7O,MAC1DhC,EAAuB8B,KAAMwnB,GAAkC,OAC/DxnB,KAAKqb,MAAM,eAAgBnd,EAAuB8B,KAAMwnB,GAAkC,MAC1F9pB,EAAuBsC,KAAMwnB,QAAkCtmB,IAM/E,SCthBO,cAAmB2U,GACtB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK8qB,MAAQ,IAAIC,GAAe/qB,KAAK8V,QACzC,CACA,MAAAK,CAAOmQ,EAAU/P,EAAQzhB,GACrB,MAAMk2B,QAAEA,KAAYlmB,GAASyR,EAC7B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYuS,SAAiB,CACvDjpB,MAAO,CAAE2tB,WACTlmB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,UACpE0E,OAAQgS,EAAOhS,SAAU,GAEjC,CAMA,QAAAqf,CAASgD,EAAOrQ,EAAQzhB,GACpB,MAAM0xB,UAAEA,GAAcjQ,EACtB,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,YAAYyS,UAAkBI,IAAS,IAC7D9xB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,MAAAgkB,CAAO+C,EAAOrQ,EAAQzhB,GAClB,MAAM0xB,UAAEA,KAAc1hB,GAASyR,EAC/B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYyS,UAAkBI,IAAS,CACjE9hB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,IAAA0X,CAAK+O,EAAUjpB,EAAQ,CAAA,EAAIvI,GACvB,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,YAAYuS,SAAe,GAAgB,CAC3EjpB,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,MAAAuE,CAAOwiB,EAAOrQ,EAAQzhB,GAClB,MAAM0xB,UAAEA,GAAcjQ,EACtB,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYyS,UAAkBI,WAAgB,IACrE9xB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,mBAAMorB,CAAc/B,EAAUpkB,EAAMhQ,GAChC,MAAM8zB,QAAY5oB,KAAKmW,OAAO+S,EAAUpkB,EAAMhQ,GAC9C,aAAakL,KAAKkrB,KAAKtC,EAAIvzB,GAAI,CAAEmxB,UAAW0C,GAAYp0B,EAC5D,CAMA,eAAAq2B,CAAgBjC,EAAUpkB,EAAMhQ,GAC5B,OAAOuzB,GAAgBY,sBAAsBC,EAAUlpB,KAAK8V,QAAQsV,KAAKC,QAAQ5C,KAAM3jB,EAAMhQ,EACjG,CAMA,UAAMo2B,CAAK1C,EAAOjS,EAAQzhB,GACtB,MAAM+K,EAAU4kB,GAAa,CACzB3vB,GAAS+K,QACT,CACI,0BAA2B,OAC3B,mCAAoC/K,GAASw2B,gBAAgBvsB,iBAAcmC,KAGnF,OAAa,CACT,MAAQhB,KAAM0oB,EAAGx0B,SAAEA,SAAmB4L,KAAK4jB,SAAS4E,EAAOjS,EAAQ,IAC5DzhB,EACH+K,QAAS,IAAK/K,GAAS+K,WAAYA,KACpC6R,eACH,OAAQkX,EAAIxwB,QAER,IAAK,SACL,IAAK,cACL,IAAK,aACD,IAAImzB,EAAgB,IACpB,GAAIz2B,GAASw2B,eACTC,EAAgBz2B,EAAQw2B,mBAEvB,CACD,MAAME,EAAiBp3B,EAASyL,QAAQ3G,IAAI,wBAC5C,GAAIsyB,EAAgB,CAChB,MAAMC,EAAmB/jB,SAAS8jB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACM3pB,EAAMypB,GACZ,MAEJ,IAAK,kBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,SACL,IAAK,UACD,OAAO3C,EAEnB,CACJ,CAIA,MAAArkB,CAAO2kB,EAAUpkB,EAAMhQ,GACnB,OAAOuzB,GAAgBY,sBAAsBC,EAAUlpB,KAAK8V,QAAQsV,KAAKC,QAAQ5C,KAAM3jB,EAAMhQ,EACjG,CACA,iBAAA+zB,CAAkBjC,EAAOrQ,EAAQzhB,GAC7B,MAAM0xB,UAAEA,KAAc1hB,GAASyR,EAC/B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYyS,UAAkBI,wBAA6B,CACrF9hB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,UACpE0E,OAAQgS,EAAOhS,SAAU,GAEjC,CAMA,8BAAMonB,CAAyBnD,EAAOjS,EAAQzhB,GAC1C,MAAM8zB,QAAY5oB,KAAK6oB,kBAAkBL,EAAOjS,EAAQzhB,GACxD,aAAakL,KAAKkrB,KAAKtC,EAAIvzB,GAAIkhB,EAAQzhB,EAC3C,CAMA,uBAAA82B,CAAwBpD,EAAOjS,EAAQzhB,GACnC,OAAOuzB,GAAgBE,0BAA0BC,EAAOxoB,KAAK8V,QAAQsV,KAAKC,QAAQ5C,KAAMlS,EAAQzhB,EACpG,GAEJ+2B,GAAKpF,MAAQA,GCnKN,MAAMqF,WAAgBjW,GACzB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKyoB,KAAO,IAAIsD,GAAa/rB,KAAK8V,SAClC9V,KAAK5C,SAAW,IAAIsmB,GAAqB1jB,KAAK8V,QAClD,CAMA,MAAAK,CAAOrR,EAAO,CAAA,EAAIhQ,GACd,OAAOkL,KAAK8V,QAAQ6N,KAAK,WAAY,CACjC7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,QAAA+jB,CAAS0C,EAAUxxB,GACf,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,YAAYuS,IAAY,IAC9CxxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,MAAAgkB,CAAOyC,EAAUxhB,EAAMhQ,GACnB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYuS,IAAY,CAClDxhB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAMA,OAAOymB,EAAUxxB,GACb,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,YAAYuS,IAAY,IACjDxxB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CACA,YAAA+pB,CAAa9kB,EAAMhQ,GACf,OAAOkL,KAAK8V,QAAQ6N,KAAK,gBAAiB,CACtC7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,UACpE0E,OAAQO,EAAKP,SAAU,GAE/B,CAMA,sBAAMynB,CAAiBlnB,EAAMhQ,GACzB,MAAM8zB,QAAY5oB,KAAK4pB,aAAa9kB,EAAMhQ,GAC1C,aAAakL,KAAKyoB,KAAKyC,KAAKtC,EAAIvzB,GAAI,CAAEmxB,UAAWoC,EAAIpC,WAAa1xB,EACtE,CAIA,kBAAAm3B,CAAmBnnB,EAAMhQ,GACrB,OAAOuzB,GAAgBS,4BAA4BhkB,EAAM9E,KAAK8V,QAAQsV,KAAKC,QAASv2B,EACxF,EAEJg3B,GAAQD,KAAOA,GACfC,GAAQ7H,SAAWA,GCjFZ,MAAMiI,WAAarW,GACtB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKmsB,SAAW,IAAIC,GAAqBpsB,KAAK8V,SAC9C9V,KAAKqsB,WAAa,IAAIC,GAAyBtsB,KAAK8V,SACpD9V,KAAKqrB,QAAU,IAAIkB,GAAmBvsB,KAAK8V,QAC/C,EAEJoW,GAAK7F,SAAWA,GAChB6F,GAAKrG,WAAaA,GAClBqG,GAAKJ,QAAUA,GChBR,MAAM9H,WAAoBnO,GAC7B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,eAAgB,CAAE7e,UAAShQ,EAASyP,OAAQO,EAAKP,SAAU,GACxF,ECDG,MAAMioB,WAAgB3W,GAIzB,QAAA+N,CAAS6I,EAAQlW,EAAQzhB,GACrB,MAAM43B,aAAEA,GAAiBnW,EACzB,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,eAAe2Y,WAAsBD,YAAkB,IAC7E33B,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,sBAAwBlwB,GAAS+K,UAClE4Q,kBAAkB,GAE1B,SCPG,cAAoBoF,GACvB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKnK,QAAU,IAAI82B,GAAmB3sB,KAAK8V,QAC/C,CAOA,MAAAK,CAAOyW,EAAa9nB,EAAMhQ,GACtB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,eAAe6Y,UAAqB1Y,GAA4B,CAAEpP,UAAShQ,GAAWkL,KAAK8V,SAC7H,CAIA,QAAA8N,CAAS6I,EAAQlW,EAAQzhB,GACrB,MAAM43B,aAAEA,GAAiBnW,EACzB,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,eAAe2Y,WAAsBD,IAAU33B,EAChF,CAIA,IAAAyiB,CAAKqV,EAAavvB,EAAQ,CAAA,EAAIvI,GAC1B,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,eAAe6Y,UAAmB,GAAgB,CAClFvvB,WACGvI,GAEX,CAIA,OAAO23B,EAAQlW,EAAQzhB,GACnB,MAAM43B,aAAEA,GAAiBnW,EACzB,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,eAAe2Y,WAAsBD,IAAU,IACxE33B,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,OAASlwB,GAAS+K,WAE3D,GAEJgtB,GAAML,QAAUA,GC1CT,MAAMM,WAAmBjX,GAC5B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK+sB,MAAQ,IAAIC,GAAehtB,KAAK8V,QACzC,CAIA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,cAAe,CAAE7e,UAAShQ,GACvD,CAIA,QAAA8uB,CAASgJ,EAAa93B,GAClB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,eAAe6Y,IAAe93B,EAC/D,CAIA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,cAAa,GAAgB,CAAEpa,WAAUvI,GAC5E,CAIA,OAAO83B,EAAa93B,GAChB,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,eAAe6Y,IAAe,IACvD93B,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,OAASlwB,GAAS+K,WAE3D,EAEJitB,GAAWD,MAAQA,GCpCZ,MAAMI,WAAcpX,GAIvB,MAAAM,CAAO+W,EAAgB3W,EAAQzhB,GAC3B,MAAMk2B,QAAEA,KAAYlmB,GAASyR,EAC7B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBmZ,UAAwB,CACpE7vB,MAAO,CAAE2tB,WACTlmB,UACGhQ,GAEX,CAIA,QAAA8uB,CAASuJ,EAAQ5W,EAAQzhB,GACrB,MAAMs4B,gBAAEA,KAAoB/vB,GAAUkZ,EACtC,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,kBAAkBqZ,WAAyBD,IAAU,CAAE9vB,WAAUvI,GAClG,CAIA,IAAAyiB,CAAK2V,EAAgB7vB,EAAQ,CAAA,EAAIvI,GAC7B,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,kBAAkBmZ,UAAsB,GAA4B,CAAE7vB,WAAUvI,GACxH,CAIA,OAAOq4B,EAAQ5W,EAAQzhB,GACnB,MAAMs4B,gBAAEA,GAAoB7W,EAC5B,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,kBAAkBqZ,WAAyBD,IAAUr4B,EACzF,EC9BG,MAAMu4B,WAAsBxX,GAC/B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKnD,MAAQ,IAAIywB,GAAettB,KAAK8V,QACzC,CAIA,MAAAK,CAAOrR,EAAO,CAAA,EAAIhQ,GACd,OAAOkL,KAAK8V,QAAQ6N,KAAK,iBAAkB,CAAE7e,UAAShQ,GAC1D,CAIA,QAAA8uB,CAASsJ,EAAgBp4B,GACrB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,kBAAkBmZ,IAAkBp4B,EACrE,CAIA,MAAA+uB,CAAOqJ,EAAgBpoB,EAAMhQ,GACzB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBmZ,IAAkB,CAAEpoB,UAAShQ,GACjF,CAIA,OAAOo4B,EAAgBp4B,GACnB,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,kBAAkBmZ,IAAkBp4B,EACxE,EAEJu4B,GAAcJ,MAAQA,GChCf,MAAMM,WAAmB1X,GAa5B,MAAAM,CAAOrR,EAAMhQ,GACT,MAAM04B,IAAkC1oB,EAAK2oB,gBAG7C,IAAIA,EAAkBD,EAAgC1oB,EAAK2oB,gBAAkB,SACzED,GACA5gB,GAAU5M,KAAK8V,SAASvJ,MAAM,2CAA4CzH,EAAK2oB,iBAEnF,MAAMr5B,EAAW4L,KAAK8V,QAAQ6N,KAAK,cAAe,CAC9C7e,KAAM,IACCA,EACH2oB,gBAAiBA,MAElB34B,IAGP,OAAI04B,EACOp5B,GAMXwY,GAAU5M,KAAK8V,SAASvJ,MAAM,qDACvBnY,EAASkd,aAAald,IACrBA,GAAYA,EAAS8L,MACrB9L,EAAS8L,KAAKlL,SAAS04B,IACnB,MAAMC,EAAqBD,EAAmBE,UAC9CF,EAAmBE,UZPT,CAACC,IAC3B,GAAsB,oBAAXC,OAAwB,CAE/B,MAAMC,EAAMD,OAAOn3B,KAAKk3B,EAAW,UACnC,OAAOn3B,MAAMC,KAAK,IAAIq3B,aAAaD,EAAI7iB,OAAQ6iB,EAAIE,WAAYF,EAAIt7B,OAASu7B,aAAaE,mBAC7F,CACK,CAED,MAAMC,EAAYC,KAAKP,GACjBQ,EAAMF,EAAU17B,OAChB8X,EAAQ,IAAI7L,WAAW2vB,GAC7B,IAAK,IAAIv7B,EAAI,EAAGA,EAAIu7B,EAAKv7B,IACrByX,EAAMzX,GAAKq7B,EAAUtmB,WAAW/U,GAEpC,OAAO4D,MAAMC,KAAK,IAAIq3B,aAAazjB,EAAMW,QAC7C,GYR+CojB,CAAeX,EAAmB,IAGlEv5B,KAEf,EC7CG,MAAMm6B,WAAoB1Y,GAI7B,QAAA+N,CAAS4K,EAAcjY,EAAQzhB,GAC3B,MAAM25B,QAAEA,EAAO9H,OAAEA,GAAWpQ,EAC5B,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,UAAU0a,UAAgB9H,kBAAuB6H,IAAgB15B,EAClG,CAIA,IAAAyiB,CAAKqP,EAAOrQ,EAAQzhB,GAChB,MAAM25B,QAAEA,KAAYpxB,GAAUkZ,EAC9B,OAAOvW,KAAK8V,QAAQ2B,WAAW1D,EAAK,UAAU0a,UAAgB7H,iBAAoB,GAAgB,CAAEvpB,WAAUvI,GAClH,ECZG,MAAM+2B,WAAahW,GACtB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK0uB,YAAc,IAAIC,GAA2B3uB,KAAK8V,QAC3D,CAMA,MAAAK,CAAOyY,EAAQ9pB,EAAMhQ,GACjB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,UAAU6a,SAAe,CAAE9pB,UAAShQ,GACtE,CAIA,QAAA8uB,CAASgD,EAAOrQ,EAAQzhB,GACpB,MAAM25B,QAAEA,GAAYlY,EACpB,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,UAAU0a,UAAgB7H,IAAS9xB,EACpE,CAIA,IAAAyiB,CAAKqX,EAAQvxB,EAAQ,CAAA,EAAIvI,GACrB,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,UAAU6a,SAAa,GAAgB,CACvEvxB,WACGvI,GAEX,CAIA,OAAO8xB,EAAOrQ,EAAQzhB,GAClB,MAAM25B,QAAEA,GAAYlY,EACpB,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,UAAU0a,UAAgB7H,IAAS9xB,EACvE,CAIA,MAAAsP,CAAOwiB,EAAOrQ,EAAQzhB,GAClB,MAAM25B,QAAEA,GAAYlY,EACpB,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,UAAU0a,UAAgB7H,IAAS9xB,EACrE,EAEJ+2B,GAAK0C,YAAcA,GC5CZ,MAAMM,WAAchZ,GACvB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKyoB,KAAO,IAAIsD,GAAa/rB,KAAK8V,QACtC,CASA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,SAAU,CAAE7e,UAAShQ,GAClD,CAIA,QAAA8uB,CAASgL,EAAQ95B,GACb,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,UAAU6a,IAAU95B,EACrD,CAIA,MAAA+uB,CAAO+K,EAAQ9pB,EAAMhQ,GACjB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,UAAU6a,IAAU,CAAE9pB,UAAShQ,GACjE,CAIA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,SAAQ,GAAgB,CAAEpa,WAAUvI,GACvE,CAIA,OAAO85B,EAAQ95B,GACX,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,UAAU6a,IAAU95B,EACxD,EAEJ+5B,GAAMhD,KAAOA,UCvCN,cAAoBhW,GAwBvB,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,SAAUzP,GAA4B,CAAEpP,UAAShQ,GAAWkL,KAAK8V,SAC9F,CAIA,QAAA8N,CAAS6I,EAAQ33B,GACb,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,UAAU0Y,IAAU33B,EACrD,CAIA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,SAAQ,GAAgB,CAAEpa,WAAUvI,GACvE,CAIA,OAAO23B,EAAQ33B,GACX,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,UAAU0Y,IAAU33B,EACxD,CAIA,OAAAe,CAAQ42B,EAAQ33B,GACZ,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,UAAU0Y,YAAkB,IAClD33B,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,sBAAwBlwB,GAAS+K,UAClE4Q,kBAAkB,GAE1B,CAIA,uBAAMqe,CAAkBz5B,GAAI05B,aAAEA,EAAe,IAAIC,QAAEA,EAAU,MAAmB,IAC5E,MAAMC,EAAkB,IAAIhjB,IAAI,CAAC,YAAa,QAAS,YACjDlI,EAAQqE,KAAK4I,MACnB,IAAIke,QAAalvB,KAAK4jB,SAASvuB,GAC/B,MAAQ65B,EAAK92B,SAAW62B,EAAgBlxB,IAAImxB,EAAK92B,SAG7C,SAFM0J,EAAMitB,GACZG,QAAalvB,KAAK4jB,SAASvuB,GACvB+S,KAAK4I,MAAQjN,EAAQirB,EACrB,MAAM,IAAI7tB,EAA0B,CAChCnE,QAAS,iCAAiC3H,gCAAiC25B,oBAIvF,OAAOE,CACX,GC9EG,MAAMC,WAAgBtZ,WCAtB,cAAsBA,GAkBzB,GAAA+S,CAAI9jB,EAAMhQ,GACN,OAAOkL,KAAK8V,QAAQ6N,KAAK,iCAAkC,CAAE7e,UAAShQ,GAC1E,CAkBA,QAAAs6B,CAAStqB,EAAMhQ,GACX,OAAOkL,KAAK8V,QAAQ6N,KAAK,sCAAuC,CAAE7e,UAAShQ,GAC/E,GCtCG,MAAMu6B,WAAcxZ,GACvB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKsvB,QAAU,IAAIC,GAAmBvvB,KAAK8V,QAC/C,EAEJuZ,GAAMG,QAAUA,GCNT,MAAMC,WAAoB5Z,GAkB7B,MAAAM,CAAOuZ,EAA0B5qB,EAAMhQ,GACnC,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,4BAA4B2b,gBAAsC,GAAU,CAAE5qB,OAAM6qB,OAAQ,UAAW76B,GAC/I,CAeA,QAAA8uB,CAAS8L,EAA0BryB,EAAQ,CAAA,EAAIvI,GAC3C,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,4BAA4B2b,gBAAwC,CAC7FryB,WACGvI,GAEX,CAmBA,OAAO86B,EAAcrZ,EAAQzhB,GACzB,MAAM+6B,4BAAEA,GAAgCtZ,EACxC,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,4BAA4B8b,iBAA2CD,IAAgB96B,EAC3H,SC9DG,cAA0B+gB,GAC7B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK8vB,YAAc,IAAIC,GAA2B/vB,KAAK8V,QAC3D,GAEJka,GAAYP,YAAcA,GCNnB,MAAMO,WAAoBna,GAc7B,IAAA0B,CAAK0Y,EAAiB5yB,EAAQ,CAAA,EAAIvI,GAC9B,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,qBAAqBkc,gBAA6B,GAAgB,CAAE5yB,WAAUvI,GACtH,ECdG,MAAMo7B,WAAara,GACtB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKmwB,YAAc,IAAIC,GAA2BpwB,KAAK8V,QAC3D,CAkBA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,oBAAqB,CAAE7e,UAAShQ,GAC7D,CAaA,QAAA8uB,CAASqM,EAAiBn7B,GACtB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,qBAAqBkc,IAAmBn7B,EACzE,CAYA,IAAAyiB,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,oBAAmB,GAAgB,CAAEpa,WAAUvI,GAClF,CAWA,MAAAsP,CAAO6rB,EAAiBn7B,GACpB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,qBAAqBkc,WAA0Bn7B,EACjF,CAcA,UAAAu7B,CAAWJ,EAAiB5yB,EAAQ,CAAA,EAAIvI,GACpC,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,qBAAqBkc,WAAwB,GAAgB,CAAE5yB,WAAUvI,GACjH,CAWA,KAAAw7B,CAAML,EAAiBn7B,GACnB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,qBAAqBkc,UAAyBn7B,EAChF,CAWA,MAAAy7B,CAAON,EAAiBn7B,GACpB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,qBAAqBkc,WAA0Bn7B,EACjF,EAEJo7B,GAAKF,YAAcA,GC1GZ,MAAMQ,WAAmB3a,GAC5B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKywB,QAAU,IAAIC,GAAmB1wB,KAAK8V,SAC3C9V,KAAK2wB,KAAO,IAAIC,GAAa5wB,KAAK8V,SAClC9V,KAAKmwB,YAAc,IAAIC,GAA2BpwB,KAAK8V,SACvD9V,KAAK6wB,MAAQ,IAAIC,GAAe9wB,KAAK8V,QACzC,EAEJ0a,GAAWrB,QAAUA,GACrBqB,GAAWN,KAAOA,GAClBM,GAAWR,YAAcA,GACzBQ,GAAWnB,MAAQA,GCpBZ,MAAM0B,WAAqBlb,ICE3B,MAAM2Z,WAAgB3Z,GACzB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKgxB,aAAe,IAAIC,GAA6BjxB,KAAK8V,QAC9D,EAEJ0Z,GAAQuB,aAAeA,GCPhB,MAAMG,WAAerb,GAWxB,eAAAsb,CAAgBrsB,EAAMhQ,GAClB,OAAOkL,KAAK8V,QAAQ6N,KAAK,qBAAsBzP,GAA4B,CAAEpP,UAAShQ,GAAWkL,KAAK8V,SAC1G,CACA,IAAAsb,CAAKtsB,EAAMhQ,GACP,OAAOkL,KAAK8V,QAAQ6N,KAAK,gBAAiBzP,GAA4B,CAAEpP,UAAShQ,EAASyP,OAAQO,EAAKP,SAAU,GAASvE,KAAK8V,SACnI,CACA,QAAAxV,CAASwE,EAAMhQ,GACX,OAAOkL,KAAK8V,QAAQ6N,KAAK,sBAAuB,CAAE7e,UAAShQ,EAASyP,OAAQO,EAAKP,SAAU,GAC/F,EClBG,MAAM8sB,WAAexb,GAKxB,QAAA+N,CAASrtB,EAAOzB,GACZ,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,WAAWxd,IAASzB,EACrD,CAKA,IAAAyiB,CAAKziB,GACD,OAAOkL,KAAK8V,QAAQ2B,WAAW,UAAS,GAAU3iB,EACtD,CAKA,OAAOyB,EAAOzB,GACV,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,WAAWxd,IAASzB,EACxD,ECvBG,MAAMw8B,WAAoBzb,GAK7B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,eAAgB,CAAE7e,UAAShQ,GACxD,ECPG,MAAMy8B,WAAsB1b,GAI/B,MAAAM,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,2BAA4B,CAAE7e,UAAShQ,GACpE,ECJG,MAAMuxB,WAAiBxQ,GAC1B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKwxB,cAAgB,IAAIC,GAA+BzxB,KAAK8V,QACjE,ECNG,SAAS4b,GAAmBt9B,EAAUmiB,GACzC,OAAKA,GAqFF,SAA+BA,GAClC,GAAIsB,GAA6BtB,EAAOzlB,MAAMwW,QAC1C,OAAO,EAEX,OAAO,CACX,CA1FoB8R,CAAsB7C,GA0B/BlF,GAAcjd,EAAUmiB,GAzBpB,IACAniB,EACHu9B,cAAe,KACfxmB,OAAQ/W,EAAS+W,OAAOvU,KAAK8F,GACP,kBAAdA,EAAKrE,KACE,IACAqE,EACHic,iBAAkB,MAGR,YAAdjc,EAAKrE,KACE,IACAqE,EACH7G,QAAS6G,EAAK7G,QAAQe,KAAKf,IAAO,IAC3BA,EACHmjB,OAAQ,UAKTtc,IAM3B,CACO,SAAS2U,GAAcjd,EAAUmiB,GACpC,MAAMpL,EAAS/W,EAAS+W,OAAOvU,KAAK8F,IAChC,GAAkB,kBAAdA,EAAKrE,KACL,MAAO,IACAqE,EACHic,iBAAkBI,GAAcxC,EAAQ7Z,IAGhD,GAAkB,YAAdA,EAAKrE,KAAoB,CACzB,MAAMxC,EAAU6G,EAAK7G,QAAQe,KAAKf,GACT,gBAAjBA,EAAQwC,KACD,IACAxC,EACHmjB,OAAQ4Y,GAAgBrb,EAAQ1gB,EAAQ/E,OAGzC+E,IAEX,MAAO,IACA6G,EACH7G,UAER,CACA,OAAO6G,CAAI,IAETsc,EAAS1Z,OAAO+jB,OAAO,CAAA,EAAIjvB,EAAU,CAAE+W,WAoB7C,OAnBK7L,OAAOuyB,yBAAyBz9B,EAAU,gBAC3C09B,GAAc9Y,GAElB1Z,OAAO2R,eAAe+H,EAAQ,gBAAiB,CAC3C9H,YAAY,EACZ,GAAAhY,GACI,IAAK,MAAMiS,KAAU6N,EAAO7N,OACxB,GAAoB,YAAhBA,EAAO9S,KAGX,IAAK,MAAMxC,KAAWsV,EAAOtV,QACzB,GAAqB,gBAAjBA,EAAQwC,MAA6C,OAAnBxC,EAAQmjB,OAC1C,OAAOnjB,EAAQmjB,OAI3B,OAAO,IACX,IAEGA,CACX,CACA,SAAS4Y,GAAgBrb,EAAQ1gB,GAC7B,GAAkC,gBAA9B0gB,EAAOzlB,MAAMwW,QAAQjP,KACrB,OAAO,KAEX,GAAI,cAAeke,EAAOzlB,MAAMwW,OAAQ,CACpC,MAAMyqB,EAAcxb,EAAOzlB,MAAMwW,OACjC,OAAOyqB,EAAYnZ,UAAU/iB,EACjC,CACA,OAAOyD,KAAKC,MAAM1D,EACtB,CA+BA,SAASkjB,GAAcxC,EAAQgC,GAC3B,MAAMC,GAJkBwZ,EAIazb,EAAOkC,OAAS,GAJhBxZ,EAIoBsZ,EAAStZ,KAH3D+yB,EAAYtZ,MAAMf,GAAuB,aAAdA,EAAKtf,MAAuBsf,EAAK1Y,OAASA,KADhF,IAA4B+yB,EAAa/yB,EAHN0Y,EAQ/B,MAAO,IACAY,KACAA,EACHI,kBAX2BhB,EAWUa,EAVb,wBAArBb,GAAe,OAUgCa,EAAUI,UAAUL,EAASM,WACzEL,GAAWM,OAASxf,KAAKC,MAAMgf,EAASM,WACpC,MAElB,CAkBO,SAASiZ,GAAcG,GAC1B,MAAMC,EAAQ,GACd,IAAK,MAAM/mB,KAAU8mB,EAAI9mB,OACrB,GAAoB,YAAhBA,EAAO9S,KAGX,IAAK,MAAMxC,KAAWsV,EAAOtV,QACJ,gBAAjBA,EAAQwC,MACR65B,EAAMn/B,KAAK8C,EAAQ/E,MAI/BmhC,EAAIE,YAAcD,EAAMnqB,KAAK,GACjC,CC9JA,IAAIqqB,GAA2BC,GAAwBC,GAAyCC,GAA+BC,GAA8BC,GAA0BC,GAA4BC,GFUnNtM,GAASkL,cAAgBA,GELlB,MAAMqB,WAAuB7X,GAChC,WAAAnb,CAAY2W,GACRzW,QACAsyB,GAA0BpX,IAAIhb,MAC9BqyB,GAAuBp0B,IAAI+B,UAAM,GACjCsyB,GAAwCr0B,IAAI+B,UAAM,GAClDuyB,GAA8Bt0B,IAAI+B,UAAM,GACxCtC,EAAuBsC,KAAMqyB,GAAwB9b,EACzD,CACA,qBAAOsc,CAAelmB,EAAQ4J,EAAQzhB,GAClC,MAAMoqB,EAAS,IAAI0T,GAAerc,GAKlC,OAJA2I,EAAOhE,MAAK,IAAMgE,EAAO4T,0BAA0BnmB,EAAQ4J,EAAQ,IAC5DzhB,EACH+K,QAAS,IAAK/K,GAAS+K,QAAS,4BAA6B,cAE1Dqf,CACX,CACA,+BAAM4T,CAA0BnmB,EAAQ4J,EAAQzhB,GAC5C,MAAM0oB,EAAS1oB,GAAS0oB,OAOxB,IAAIjZ,EANAiZ,IACIA,EAAO/B,SACPzb,KAAKiE,WAAWoK,QACpBmP,EAAOC,iBAAiB,SAAS,IAAMzd,KAAKiE,WAAWoK,WAE3DnQ,EAAuB8B,KAAMoyB,GAA2B,IAAKI,IAA8Br0B,KAAK6B,MAEhG,IAAI+yB,EAAiB,KACjB,gBAAiBxc,GACjBhS,QAAeoI,EAAOqmB,UAAUpP,SAASrN,EAAO0c,YAAa,CAAE1uB,QAAQ,GAAQ,IAAKzP,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,OAAQjZ,QAAQ,IACrIwuB,EAAiBxc,EAAOwc,gBAAkB,MAG1CxuB,QAAeoI,EAAOqmB,UAAU7c,OAAO,IAAKI,EAAQhS,QAAQ,GAAQ,IAAKzP,EAAS0oB,OAAQxd,KAAKiE,WAAWuZ,SAE9Gxd,KAAKsb,aACL,UAAW,MAAMvM,KAASxK,EACtBrG,EAAuB8B,KAAMoyB,GAA2B,IAAKK,IAA0Bt0B,KAAK6B,KAAM+O,EAAOgkB,GAE7G,GAAIxuB,EAAON,WAAWuZ,QAAQ/B,QAC1B,MAAM,IAAIxa,EAEd,OAAO/C,EAAuB8B,KAAMoyB,GAA2B,IAAKM,IAA4Bv0B,KAAK6B,KACzG,CACA,EAAEqyB,GAAyB,IAAIvoB,QAAWwoB,GAA0C,IAAIxoB,QAAWyoB,GAAgC,IAAIzoB,QAAWsoB,GAA4B,IAAIjW,QAAWqW,GAA+B,WACpNxyB,KAAKub,OAET7d,EAAuBsC,KAAMsyB,QAAyCpxB,EAC1E,EAAGuxB,GAA2B,SAAkC1jB,EAAOgkB,GACnE,GAAI/yB,KAAKub,MACL,OACJ,MAAM2X,EAAY,CAACj0B,EAAM8P,MACC,MAAlBgkB,GAA0BhkB,EAAMokB,gBAAkBJ,IAClD/yB,KAAKqb,MAAMpc,EAAM8P,EACrB,EAEE3a,EAAW8J,EAAuB8B,KAAMoyB,GAA2B,IAAKO,IAAoCx0B,KAAK6B,KAAM+O,GAE7H,OADAmkB,EAAU,QAASnkB,GACXA,EAAM1W,MACV,IAAK,6BAA8B,CAC/B,MAAM8S,EAAS/W,EAAS+W,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAE3D,GAAoB,YAAhBjoB,EAAO9S,KAAoB,CAC3B,MAAMxC,EAAUsV,EAAOtV,QAAQkZ,EAAMskB,eACrC,IAAKx9B,EACD,MAAM,IAAI6J,EAAY,4BAA4BqP,EAAMskB,iBAE5D,GAAqB,gBAAjBx9B,EAAQwC,KACR,MAAM,IAAIqH,EAAY,6CAA6C7J,EAAQwC,QAE/E66B,EAAU,6BAA8B,IACjCnkB,EACHoT,SAAUtsB,EAAQ/E,MAE1B,CACA,KACJ,CACA,IAAK,yCAA0C,CAC3C,MAAMqa,EAAS/W,EAAS+W,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAEvC,kBAAhBjoB,EAAO9S,MACP66B,EAAU,yCAA0C,IAC7CnkB,EACHoT,SAAUhX,EAAO0N,YAGzB,KACJ,CACA,QACIqa,EAAUnkB,EAAM1W,KAAM0W,GAGlC,EAAG2jB,GAA6B,WAC5B,GAAI1yB,KAAKub,MACL,MAAM,IAAI7b,EAAY,2CAE1B,MAAMyiB,EAAWjkB,EAAuB8B,KAAMsyB,GAAyC,KACvF,IAAKnQ,EACD,MAAM,IAAIziB,EAAY,4CAE1BhC,EAAuBsC,KAAMsyB,QAAyCpxB,GACtE,MAAMoyB,EAoJd,SAA0BnR,EAAU5L,GAChC,OAAOmb,GAAmBvP,EAAU5L,EACxC,CAtJ+Bgd,CAAiBpR,EAAUjkB,EAAuB8B,KAAMqyB,GAAwB,MAEvG,OADA30B,EAAuBsC,KAAMuyB,GAA+Be,GACrDA,CACX,EAAGX,GAAqC,SAA4C5jB,GAChF,IAAIoT,EAAWjkB,EAAuB8B,KAAMsyB,GAAyC,KACrF,IAAKnQ,EAAU,CACX,GAAmB,qBAAfpT,EAAM1W,KACN,MAAM,IAAIqH,EAAY,6EAA6EqP,EAAM1W,QAG7G,OADA8pB,EAAWzkB,EAAuBsC,KAAMsyB,GAAyCvjB,EAAM3a,UAChF+tB,CACX,CACA,OAAQpT,EAAM1W,MACV,IAAK,6BACD8pB,EAAShX,OAAOpY,KAAKgc,EAAMrS,MAC3B,MAEJ,IAAK,8BAA+B,CAChC,MAAMyO,EAASgX,EAAShX,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAE3D,MAAM/6B,EAAO8S,EAAO9S,KACdm7B,EAAOzkB,EAAMykB,KACN,YAATn7B,GAAoC,mBAAdm7B,EAAKn7B,KAC3B8S,EAAOtV,QAAQ9C,KAAKygC,GAEN,cAATn7B,GAAsC,mBAAdm7B,EAAKn7B,OAC7B8S,EAAOtV,UACRsV,EAAOtV,QAAU,IAErBsV,EAAOtV,QAAQ9C,KAAKygC,IAExB,KACJ,CACA,IAAK,6BAA8B,CAC/B,MAAMroB,EAASgX,EAAShX,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAE3D,GAAoB,YAAhBjoB,EAAO9S,KAAoB,CAC3B,MAAMxC,EAAUsV,EAAOtV,QAAQkZ,EAAMskB,eACrC,IAAKx9B,EACD,MAAM,IAAI6J,EAAY,4BAA4BqP,EAAMskB,iBAE5D,GAAqB,gBAAjBx9B,EAAQwC,KACR,MAAM,IAAIqH,EAAY,6CAA6C7J,EAAQwC,QAE/ExC,EAAQ/E,MAAQie,EAAMmT,KAC1B,CACA,KACJ,CACA,IAAK,yCAA0C,CAC3C,MAAM/W,EAASgX,EAAShX,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAEvC,kBAAhBjoB,EAAO9S,OACP8S,EAAO0N,WAAa9J,EAAMmT,OAE9B,KACJ,CACA,IAAK,gCAAiC,CAClC,MAAM/W,EAASgX,EAAShX,OAAO4D,EAAMqkB,cACrC,IAAKjoB,EACD,MAAM,IAAIzL,EAAY,2BAA2BqP,EAAMqkB,gBAE3D,GAAoB,cAAhBjoB,EAAO9S,KAAsB,CAC7B,MAAMxC,EAAUsV,EAAOtV,UAAUkZ,EAAMskB,eACvC,IAAKx9B,EACD,MAAM,IAAI6J,EAAY,4BAA4BqP,EAAMskB,iBAE5D,GAAqB,mBAAjBx9B,EAAQwC,KACR,MAAM,IAAIqH,EAAY,gDAAgD7J,EAAQwC,QAElFxC,EAAQ/E,MAAQie,EAAMmT,KAC1B,CACA,KACJ,CACA,IAAK,qBACDxkB,EAAuBsC,KAAMsyB,GAAyCvjB,EAAM3a,UAIpF,OAAO+tB,CACX,EAAGve,OAAOC,kBACN,MAAM0f,EAAY,GACZC,EAAY,GAClB,IAAItxB,GAAO,EA+BX,OA9BA8N,KAAK0b,GAAG,SAAU3M,IACd,MAAMvK,EAASgf,EAAU/T,QACrBjL,EACAA,EAAO/S,QAAQsd,GAGfwU,EAAUxwB,KAAKgc,EACnB,IAEJ/O,KAAK0b,GAAG,OAAO,KACXxpB,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO/S,aAAQyP,GAEnBsiB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAExBuN,KAAK0b,GAAG,SAAU3jB,IACd7F,GAAO,EACP,IAAK,MAAMsS,KAAUgf,EACjBhf,EAAO9S,OAAOqG,GAElByrB,EAAU/wB,OAAS,CAAC,IAEjB,CACHX,KAAMqc,UACF,IAAKoV,EAAU9wB,OACX,OAAIP,EACO,CAAEN,WAAOsP,EAAWhP,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW8xB,EAAUzwB,KAAK,CAAEtB,UAASC,aAAWS,MAAM4c,GAAWA,EAAQ,CAAEnd,MAAOmd,EAAO7c,MAAM,GAAU,CAAEN,WAAOsP,EAAWhP,MAAM,KAGpK,MAAO,CAAEN,MADK2xB,EAAU9T,QACDvd,MAAM,EAAO,EAExCmS,OAAQ8J,UACJnO,KAAKqO,QACE,CAAEzc,WAAOsP,EAAWhP,MAAM,IAG7C,CAKA,mBAAMuhC,SACIzzB,KAAK9N,OACX,MAAMkC,EAAW8J,EAAuB8B,KAAMuyB,GAA+B,KAC7E,IAAKn+B,EACD,MAAM,IAAIsL,EAAY,mDAC1B,OAAOtL,CACX,EC3PG,MAAMs/B,WAAmB7d,GAc5B,IAAA0B,CAAKoc,EAAYt2B,EAAQ,CAAA,EAAIvI,GACzB,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,cAAc4f,gBAAwB,GAAgB,CAAEt2B,WAAUvI,GAC1G,ECZG,MAAM8+B,WAAkB/d,GAC3B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK6zB,WAAa,IAAIC,GAAyB9zB,KAAK8V,QACxD,CACA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,aAAc,CAAE7e,UAAShQ,EAASyP,OAAQO,EAAKP,SAAU,IAAS+M,aAAa2gB,IAChG,WAAYA,GAAsB,aAAfA,EAAIxpB,QACvBqpB,GAAcG,GAEXA,IAEf,CACA,QAAArO,CAAS+P,EAAYt2B,EAAQ,CAAA,EAAIvI,GAC7B,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,cAAc4f,IAAc,CACrDt2B,WACGvI,EACHyP,OAAQlH,GAAOkH,SAAU,IAC1B+M,aAAa2gB,IACR,WAAYA,GAAsB,aAAfA,EAAIxpB,QACvBqpB,GAAcG,GAEXA,IAEf,CAWA,OAAO0B,EAAY7+B,GACf,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,cAAc4f,IAAc,IACrD7+B,EACH+K,QAAS4kB,GAAa,CAAC,CAAEO,OAAQ,OAASlwB,GAAS+K,WAE3D,CACA,KAAAtG,CAAMuL,EAAMhQ,GACR,OAAOkL,KAAK8V,QAAQkd,UACf7c,OAAOrR,EAAMhQ,GACbwc,aAAald,GAAaid,GAAcjd,EAAU0Q,IAC3D,CAIA,MAAAP,CAAOO,EAAMhQ,GACT,OAAO89B,GAAeC,eAAe7yB,KAAK8V,QAAShR,EAAMhQ,EAC7D,CAaA,MAAAsP,CAAOuvB,EAAY7+B,GACf,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,cAAc4f,WAAqB7+B,EACrE,EAEJ8+B,GAAUF,WAAaA,GCxEhB,MAAMK,WAAcle,GAcvB,MAAAM,CAAO6d,EAAUlvB,EAAMhQ,GACnB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYigB,UAAkB9f,GAA4B,CAAEpP,UAAShQ,GAAWkL,KAAK8V,SACvH,ECfG,MAAMme,WAAgBpe,GACzB,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAKyV,MAAQ,IAAIye,GAAel0B,KAAK8V,QACzC,CAsBA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,WAAY,CAAE7e,UAAShQ,GACpD,CAIA,MAAAsP,CAAO4vB,EAAUl/B,GACb,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYigB,WAAmBl/B,EACjE,CAgBA,QAAAq/B,CAASH,EAAUlvB,EAAMhQ,GACrB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,YAAYigB,aAAqB,CAAElvB,UAAShQ,GAC9E,EAEJm/B,GAAQF,MAAQA,GCpDT,MAAMK,WAAoBve,GAI7B,MAAAM,CAAOke,EAAevvB,EAAMhQ,GACxB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBsgB,iBAA8B,CAC1EvvB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,QAAA+jB,CAASgC,EAASrP,EAAQzhB,GACtB,MAAMw/B,gBAAEA,GAAoB/d,EAC5B,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,kBAAkBugB,kBAAgC1O,IAAW,IACnF9wB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAKA,MAAAuE,CAAOwhB,EAASrP,EAAQzhB,GACpB,MAAMw/B,gBAAEA,GAAoB/d,EAC5B,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBugB,kBAAgC1O,WAAkB,IAC3F9wB,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,mBAAMorB,CAAcsJ,EAAezvB,EAAMhQ,GACrC,MAAM0/B,QAAcx0B,KAAKmW,OAAOoe,EAAezvB,GAC/C,aAAa9E,KAAKkrB,KAAKqJ,EAAeC,EAAMn/B,GAAIP,EACpD,CAIA,SAAA2/B,CAAU7O,EAASrP,EAAQzhB,GACvB,MAAMw/B,gBAAEA,KAAoBj3B,GAAUkZ,EACtC,OAAOvW,KAAK8V,QAAQ2B,WAAW1D,EAAK,kBAAkBugB,kBAAgC1O,UAAe,GAAgB,CAAEvoB,WAAUvI,EAAS+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAClN,CAOA,UAAMqrB,CAAKmJ,EAAezO,EAAS9wB,GAC/B,MAAM+K,EAAU4kB,GAAa,CACzB3vB,GAAS+K,QACT,CACI,0BAA2B,OAC3B,mCAAoC/K,GAASw2B,gBAAgBvsB,iBAAcmC,KAGnF,OAAa,CACT,MAAQhB,KAAMs0B,EAAKpgC,SAAEA,SAAmB4L,KAAK4jB,SAASgC,EAAS,CAAE0O,gBAAiBD,GAAiB,IAC5Fv/B,EACH+K,YACD6R,eACH,OAAQ8iB,EAAMp8B,QACV,IAAK,cACD,IAAImzB,EAAgB,IACpB,GAAIz2B,GAASw2B,eACTC,EAAgBz2B,EAAQw2B,mBAEvB,CACD,MAAME,EAAiBp3B,EAASyL,QAAQ3G,IAAI,wBAC5C,GAAIsyB,EAAgB,CAChB,MAAMC,EAAmB/jB,SAAS8jB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACM3pB,EAAMypB,GACZ,MACJ,IAAK,SACL,IAAK,YACL,IAAK,YACD,OAAOiJ,EAEnB,CACJ,CAMA,mBAAME,CAAcH,GAAexH,MAAEA,EAAK4H,QAAEA,EAAU,IAAM7/B,GACxD,GAAa,MAATi4B,GAAiC,GAAhBA,EAAMt6B,OACvB,MAAM,IAAI4M,MAAM,8GAEpB,MAAMu1B,EAAwB9/B,GAAS+/B,gBAAkB,EAEnDC,EAAmB7hC,KAAKC,IAAI0hC,EAAuB7H,EAAMt6B,QACzDka,EAAS3M,KAAK8V,QACdif,EAAehI,EAAMzjB,SACrB0rB,EAAa,IAAIL,GAUvB,MAAMM,EAAUv+B,MAAMo+B,GAAkBI,KAAKH,GAAcn+B,KAP3DuX,eAA4BrK,GACxB,IAAK,IAAIpH,KAAQoH,EAAU,CACvB,MAAMqxB,QAAgBxoB,EAAOogB,MAAM5W,OAAO,CAAE+Y,KAAMxyB,EAAM04B,QAAS,cAAgBtgC,GACjFkgC,EAAWjiC,KAAKoiC,EAAQ9/B,GAC5B,CACJ,IAKA,YCxH2B8Y,OAAOknB,IACtC,MAAMC,QAAgB9jC,QAAQ2G,WAAWk9B,GACnCrjC,EAAWsjC,EAAQ1sB,QAAQ3W,GAA6B,aAAlBA,EAAOmG,SACnD,GAAIpG,EAASS,OAAQ,CACjB,IAAK,MAAMR,KAAUD,EACjB8B,QAAQ2E,MAAMxG,EAAOyG,QAEzB,MAAM,IAAI2G,MAAM,GAAGrN,EAASS,kDAChC,CAEA,MAAM6W,EAAS,GACf,IAAK,MAAMrX,KAAUqjC,EACK,cAAlBrjC,EAAOmG,QACPkR,EAAOvW,KAAKd,EAAOL,OAG3B,OAAO0X,CAAM,EDuGHisB,CAAoBN,SACbj1B,KAAKirB,cAAcsJ,EAAe,CAC3CiB,SAAUR,GAElB,EExHG,MAAMnI,WAAchX,GAMvB,MAAAM,CAAOke,EAAevvB,EAAMhQ,GACxB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBsgB,UAAuB,CACnEvvB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,QAAA+jB,CAAS6I,EAAQlW,EAAQzhB,GACrB,MAAMw/B,gBAAEA,GAAoB/d,EAC5B,OAAOvW,KAAK8V,QAAQ5c,IAAI6a,EAAK,kBAAkBugB,WAAyB7H,IAAU,IAC3E33B,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,MAAAgkB,CAAO4I,EAAQlW,EAAQzhB,GACnB,MAAMw/B,gBAAEA,KAAoBxvB,GAASyR,EACrC,OAAOvW,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBugB,WAAyB7H,IAAU,CAC/E3nB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,IAAA0X,CAAK8c,EAAeh3B,EAAQ,CAAA,EAAIvI,GAC5B,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,kBAAkBsgB,UAAqB,GAAgB,CACvFh3B,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAOA,OAAO4sB,EAAQlW,EAAQzhB,GACnB,MAAMw/B,gBAAEA,GAAoB/d,EAC5B,OAAOvW,KAAK8V,QAAQgO,OAAO/P,EAAK,kBAAkBugB,WAAyB7H,IAAU,IAC9E33B,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,mBAAMorB,CAAcsJ,EAAezvB,EAAMhQ,GACrC,MAAMo6B,QAAalvB,KAAKmW,OAAOoe,EAAezvB,EAAMhQ,GACpD,aAAakL,KAAKkrB,KAAKqJ,EAAerF,EAAK75B,GAAIP,EACnD,CAOA,UAAMo2B,CAAKmJ,EAAe5H,EAAQ33B,GAC9B,MAAM+K,EAAU4kB,GAAa,CACzB3vB,GAAS+K,QACT,CACI,0BAA2B,OAC3B,mCAAoC/K,GAASw2B,gBAAgBvsB,iBAAcmC,KAGnF,OAAa,CACT,MAAMu0B,QAAqBz1B,KAAK4jB,SAAS6I,EAAQ,CAC7C6H,gBAAiBD,GAClB,IAAKv/B,EAAS+K,YAAW6R,eACtBwd,EAAOuG,EAAav1B,KAC1B,OAAQgvB,EAAK92B,QACT,IAAK,cACD,IAAImzB,EAAgB,IACpB,GAAIz2B,GAASw2B,eACTC,EAAgBz2B,EAAQw2B,mBAEvB,CACD,MAAME,EAAiBiK,EAAarhC,SAASyL,QAAQ3G,IAAI,wBACzD,GAAIsyB,EAAgB,CAChB,MAAMC,EAAmB/jB,SAAS8jB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACM3pB,EAAMypB,GACZ,MACJ,IAAK,SACL,IAAK,YACD,OAAO2D,EAEnB,CACJ,CAOA,YAAMwG,CAAOnB,EAAerF,EAAMp6B,GAC9B,MAAM6gC,QAAiB31B,KAAK8V,QAAQiX,MAAM5W,OAAO,CAAE+Y,KAAMA,EAAMkG,QAAS,cAAgBtgC,GACxF,OAAOkL,KAAKmW,OAAOoe,EAAe,CAAEqB,QAASD,EAAStgC,IAAMP,EAChE,CAIA,mBAAM4/B,CAAcH,EAAerF,EAAMp6B,GACrC,MAAM6gC,QAAiB31B,KAAK01B,OAAOnB,EAAerF,EAAMp6B,GACxD,aAAakL,KAAKkrB,KAAKqJ,EAAeoB,EAAStgC,GAAIP,EACvD,CAIA,OAAAe,CAAQ42B,EAAQlW,EAAQzhB,GACpB,MAAMw/B,gBAAEA,GAAoB/d,EAC5B,OAAOvW,KAAK8V,QAAQ2B,WAAW1D,EAAK,kBAAkBugB,WAAyB7H,YAAgB,GAAU,IAAK33B,EAAS+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAC/L,EC9HG,MAAMg2B,WAAqBhgB,GAC9B,WAAAjW,GACIE,SAAS+Y,WACT7Y,KAAK+sB,MAAQ,IAAIC,GAAehtB,KAAK8V,SACrC9V,KAAK81B,YAAc,IAAIC,GAA2B/1B,KAAK8V,QAC3D,CAIA,MAAAK,CAAOrR,EAAMhQ,GACT,OAAOkL,KAAK8V,QAAQ6N,KAAK,iBAAkB,CACvC7e,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,QAAA+jB,CAASyQ,EAAev/B,GACpB,OAAOkL,KAAK8V,QAAQ5c,IAAI6a,EAAK,kBAAkBsgB,IAAiB,IACzDv/B,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,MAAAgkB,CAAOwQ,EAAevvB,EAAMhQ,GACxB,OAAOkL,KAAK8V,QAAQ6N,KAAK5P,EAAK,kBAAkBsgB,IAAiB,CAC7DvvB,UACGhQ,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,IAAA0X,CAAKla,EAAQ,CAAA,EAAIvI,GACb,OAAOkL,KAAK8V,QAAQ2B,WAAW,iBAAgB,GAAgB,CAC3Dpa,WACGvI,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAIA,OAAOw0B,EAAev/B,GAClB,OAAOkL,KAAK8V,QAAQgO,OAAO/P,EAAK,kBAAkBsgB,IAAiB,IAC5Dv/B,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,CAKA,MAAA9G,CAAOs7B,EAAevvB,EAAMhQ,GACxB,OAAOkL,KAAK8V,QAAQ2B,WAAW1D,EAAK,kBAAkBsgB,WAAsB,GAAU,CAClFvvB,OACA6qB,OAAQ,UACL76B,EACH+K,QAAS4kB,GAAa,CAAC,CAAE,cAAe,iBAAmB3vB,GAAS+K,WAE5E,ECzEJ,IAAIm2B,GAAqBC,GAA0BC,GCA/CC,GAAmB7gC,GAAI8gC,GAAiBC,GF2E5CR,GAAahJ,MAAQA,GACrBgJ,GAAazB,YAAcA,GCvEpB,MAAMkC,WAAiBzgB,GAC1B,WAAAjW,GACIE,SAAS+Y,WACTmd,GAAoBhb,IAAIhb,KAC5B,CAIA,YAAMu2B,CAAOC,EAAS32B,EAAS42B,EAASz2B,KAAK8V,QAAQ4gB,cAAeC,EAAY,KAE5E,aADM32B,KAAK42B,gBAAgBJ,EAAS32B,EAAS42B,EAAQE,GAC9Cr9B,KAAKC,MAAMi9B,EACtB,CAWA,qBAAMI,CAAgBJ,EAAS32B,EAAS42B,EAASz2B,KAAK8V,QAAQ4gB,cAAeC,EAAY,KACrF,GAAsB,oBAAXt4B,QAC4B,mBAA5BA,OAAOw4B,OAAOC,WACW,mBAAzBz4B,OAAOw4B,OAAOE,OACrB,MAAM,IAAI13B,MAAM,wFAEpBnB,EAAuB8B,KAAMg2B,GAAqB,IAAKC,IAA0B93B,KAAK6B,KAAMy2B,GAC5F,MAAMO,EAAavS,GAAa,CAAC5kB,IAAUyJ,OACrC2tB,EAAkB/4B,EAAuB8B,KAAMg2B,GAAqB,IAAKE,IAA6B/3B,KAAK6B,KAAMg3B,EAAY,qBAC7HE,EAAYh5B,EAAuB8B,KAAMg2B,GAAqB,IAAKE,IAA6B/3B,KAAK6B,KAAMg3B,EAAY,qBACvHG,EAAYj5B,EAAuB8B,KAAMg2B,GAAqB,IAAKE,IAA6B/3B,KAAK6B,KAAMg3B,EAAY,cAEvHI,EAAmB1vB,SAASwvB,EAAW,IAC7C,GAAIxL,MAAM0L,GACN,MAAM,IAAI91B,EAA6B,oCAE3C,MAAM+1B,EAAapkC,KAAKqkC,MAAMlvB,KAAK4I,MAAQ,KAC3C,GAAIqmB,EAAaD,EAAmBT,EAChC,MAAM,IAAIr1B,EAA6B,gCAE3C,GAAI81B,EAAmBC,EAAaV,EAChC,MAAM,IAAIr1B,EAA6B,gCAK3C,MAAMi2B,EAAaN,EACdrmB,MAAM,KACNha,KAAK48B,GAAUA,EAAK1kB,WAAW,OAAS0kB,EAAKzjB,UAAU,GAAKyjB,IAE3DgE,EAAgBf,EAAO3nB,WAAW,UACpCgf,OAAOn3B,KAAK8/B,EAAO7jC,QAAQ,SAAU,IAAK,UACxCk7B,OAAOn3B,KAAK8/B,EAAQ,SAEpBgB,EAAgBN,EAAY,GAAGA,KAAaD,KAAaV,IAAY,GAAGU,KAAaV,IAErF18B,QAAYuE,OAAOw4B,OAAOC,UAAU,MAAOU,EAAe,CAAEv4B,KAAM,OAAQy4B,KAAM,YAAa,EAAO,CAAC,WAE3G,IAAK,MAAMC,KAAaJ,EACpB,IACI,MAAMK,EAAiB9J,OAAOn3B,KAAKghC,EAAW,UAE9C,SADsBt5B,OAAOw4B,OAAOE,OAAO,OAAQj9B,EAAK89B,GAAgB,IAAIvtB,aAAcrD,OAAOywB,IAE7F,MAER,CACA,MAEI,QACJ,CAEJ,MAAM,IAAIn2B,EAA6B,oEAC3C,EAEJ00B,GAAsB,IAAI7Z,QAAW8Z,GAA2B,SAAkCQ,GAC9F,GAAsB,iBAAXA,GAAyC,IAAlBA,EAAOhkC,OACrC,MAAM,IAAI4M,MAAM,oKAExB,EAAG62B,GAA8B,SAAqCr2B,EAASZ,GAC3E,IAAKY,EACD,MAAM,IAAIR,MAAM,wBAEpB,MAAMzN,EAAQiO,EAAQ3G,IAAI+F,GAC1B,GAAIrN,QACA,MAAM,IAAIyN,MAAM,4BAA4BJ,KAEhD,OAAOrN,CACX,EClDO,MAAMimC,GAiBT,WAAAj4B,EAAYk4B,QAAEA,EAAUjR,GAAQ,mBAAkBkR,OAAEA,EAASlR,GAAQ,kBAAiBmR,aAAEA,EAAenR,GAAQ,kBAAoB,KAAIoR,QAAEA,EAAUpR,GAAQ,sBAAwB,KAAI6P,cAAEA,EAAgB7P,GAAQ,0BAA4B,QAAS9c,GAAS,CAAA,GAuB3P,GAtBAosB,GAAkBnb,IAAIhb,MACtBo2B,GAAgBn4B,IAAI+B,UAAM,GAC1BA,KAAK2d,YAAc,IAAIua,GAAgBl4B,MACvCA,KAAK0d,KAAO,IAAIya,GAASn4B,MACzBA,KAAKo4B,WAAa,IAAIC,GAAer4B,MACrCA,KAAK+sB,MAAQ,IAAIuL,GAAUt4B,MAC3BA,KAAKu4B,OAAS,IAAIC,GAAWx4B,MAC7BA,KAAKy4B,MAAQ,IAAIC,GAAU14B,MAC3BA,KAAK24B,YAAc,IAAIC,GAAgB54B,MACvCA,KAAK64B,OAAS,IAAIC,GAAW94B,MAC7BA,KAAK+4B,WAAa,IAAIC,GAAeh5B,MACrCA,KAAKsvB,QAAU,IAAI2J,GAAYj5B,MAC/BA,KAAKk5B,aAAe,IAAIC,GAAiBn5B,MACzCA,KAAKo5B,SAAW,IAAIC,GAAar5B,MACjCA,KAAKorB,KAAO,IAAIkO,GAASt5B,MACzBA,KAAKu5B,QAAU,IAAIC,GAAYx5B,MAC/BA,KAAKy5B,QAAU,IAAIC,GAAY15B,MAC/BA,KAAKgzB,UAAY,IAAI2G,GAAc35B,MACnCA,KAAKmsB,SAAW,IAAIyN,GAAa55B,MACjCA,KAAK65B,cAAgB,IAAIC,GAAkB95B,MAC3CA,KAAK+5B,MAAQ,IAAIC,GAAUh6B,MAC3BA,KAAKi6B,WAAa,IAAIC,GAAel6B,WACtBkB,IAAX62B,EACA,MAAM,IAAIoC,EAAmB,mGAEjC,MAAMrlC,EAAU,CACZijC,SACAC,eACAC,UACAvB,mBACG3sB,EACH+tB,QAASA,GAAW,6BAExB,IAAKhjC,EAAQslC,yBpF3FC,oBAAXC,aAEwB,IAApBA,OAAOrpC,UAEO,oBAAd8R,UoFwFH,MAAM,IAAIq3B,EAAmB,sbAEjCn6B,KAAK83B,QAAUhjC,EAAQgjC,QACvB93B,KAAKs6B,QAAUxlC,EAAQwlC,SAAWhlC,GAAGilC,gBACrCv6B,KAAKgN,OAASlY,EAAQkY,QAAUlZ,QAChC,MAAM0mC,EAAkB,OAExBx6B,KAAKiN,SAAWutB,EAChBx6B,KAAKiN,SACDT,GAAc1X,EAAQmY,SAAU,yBAA0BjN,OACtDwM,GAAcqa,GAAQ,cAAe,4BAA6B7mB,OAClEw6B,EACRx6B,KAAKy6B,aAAe3lC,EAAQ2lC,aAC5Bz6B,KAAK06B,WAAa5lC,EAAQ4lC,YAAc,EACxC16B,KAAKmU,MAAQrf,EAAQqf,OnF9GtB,WACH,GAAqB,oBAAVA,MACP,OAAOA,MAEX,MAAM,IAAI9U,MAAM,oJACpB,CmFyGsCs7B,GAC9Bj9B,EAAuBsC,KAAMo2B,GAAiBwE,GAC9C56B,KAAK66B,SAAW/lC,EAChBkL,KAAK+3B,OAA2B,iBAAXA,EAAsBA,EAAS,cACpD/3B,KAAKg4B,aAAeA,EACpBh4B,KAAKi4B,QAAUA,EACfj4B,KAAK02B,cAAgBA,CACzB,CAIA,WAAAoE,CAAYhmC,GAgBR,OAfe,IAAIkL,KAAKJ,YAAY,IAC7BI,KAAK66B,SACR/C,QAAS93B,KAAK83B,QACd4C,WAAY16B,KAAK06B,WACjBJ,QAASt6B,KAAKs6B,QACdttB,OAAQhN,KAAKgN,OACbC,SAAUjN,KAAKiN,SACfkH,MAAOnU,KAAKmU,MACZsmB,aAAcz6B,KAAKy6B,aACnB1C,OAAQ/3B,KAAK+3B,OACbC,aAAch4B,KAAKg4B,aACnBC,QAASj4B,KAAKi4B,QACdvB,cAAe12B,KAAK02B,iBACjB5hC,GAGX,CACA,YAAAimC,GACI,OAAO/6B,KAAK66B,SAASE,YACzB,CACA,eAAAC,EAAgB1xB,OAAEA,EAAMgb,MAAEA,IAE1B,CACA,iBAAM2W,CAAYlxB,GACd,OAAO0a,GAAa,CAAC,CAAEyW,cAAe,UAAUl7B,KAAK+3B,WACzD,CACA,cAAAoD,CAAe99B,GACX,OAAO+9B,GAAa/9B,EAAO,CAAEuJ,YAAa,YAC9C,CACA,YAAAy0B,GACI,MAAO,GAAGr7B,KAAKJ,YAAYX,WAAW+C,GAC1C,CACA,qBAAAs5B,GACI,MAAO,wBAAwBl9B,KACnC,CACA,eAAAm9B,CAAgBnjC,EAAQK,EAAOuE,EAAS6C,GACpC,OAAO27B,EAAgBl7B,SAASlI,EAAQK,EAAOuE,EAAS6C,EAC5D,CACA,iBAAM47B,GACF,MAAM1D,EAAS/3B,KAAK66B,SAAS9C,OAC7B,GAAsB,mBAAXA,EACP,OAAO,EACX,IAAI2D,EACJ,IACIA,QAAc3D,GAClB,CACA,MAAOhgC,GACH,GAAIA,aAAeoiC,EACf,MAAMpiC,EACV,MAAM,IAAIoiC,EAAmB,+CAA+CpiC,EAAIiF,UAEhF,CAAEwC,MAAOzH,GACb,CACA,GAAqB,iBAAV2jC,IAAuBA,EAC9B,MAAM,IAAIvB,EAAmB,0EAA0EuB,KAG3G,OADA17B,KAAK+3B,OAAS2D,GACP,CACX,CACA,QAAAC,CAAS5nB,EAAM1W,EAAOu+B,GAClB,MAAM9D,GAAY55B,EAAuB8B,KAAMm2B,GAAmB,IAAKE,IAA2Bl4B,KAAK6B,OAAS47B,GAAmB57B,KAAK83B,QAClIv/B,EvFpLe,CAACA,GACnBgJ,EAAuBsV,KAAKte,GuFmLnBsjC,CAAc9nB,GACtB,IAAI+nB,IAAI/nB,GACN,IAAI+nB,IAAIhE,GAAWA,EAAQhoB,SAAS,MAAQiE,EAAKjF,WAAW,KAAOiF,EAAKtY,MAAM,GAAKsY,IACnFgnB,EAAe/6B,KAAK+6B,eAO1B,OvFjLD,SAAoBrnC,GACvB,IAAKA,EACD,OAAO,EACX,IAAK,MAAMqoC,KAAMroC,EACb,OAAO,EACX,OAAO,CACX,CuFqKasoC,CAAWjB,KACZ19B,EAAQ,IAAK09B,KAAiB19B,IAEb,iBAAVA,GAAsBA,IAAU3G,MAAM8K,QAAQnE,KACrD9E,EAAIQ,OAASiH,KAAKm7B,eAAe99B,IAE9B9E,EAAIwG,UACf,CAIA,oBAAMk9B,CAAennC,SACXkL,KAAKy7B,aACf,CAOA,oBAAMS,CAAerpB,GAASta,IAAEA,EAAGzD,QAAEA,IAAa,CAClD,GAAAoE,CAAI6a,EAAMhK,GACN,OAAO/J,KAAKm8B,cAAc,MAAOpoB,EAAMhK,EAC3C,CACA,IAAA4Z,CAAK5P,EAAMhK,GACP,OAAO/J,KAAKm8B,cAAc,OAAQpoB,EAAMhK,EAC5C,CACA,KAAAqyB,CAAMroB,EAAMhK,GACR,OAAO/J,KAAKm8B,cAAc,QAASpoB,EAAMhK,EAC7C,CACA,GAAAsyB,CAAItoB,EAAMhK,GACN,OAAO/J,KAAKm8B,cAAc,MAAOpoB,EAAMhK,EAC3C,CACA,OAAOgK,EAAMhK,GACT,OAAO/J,KAAKm8B,cAAc,SAAUpoB,EAAMhK,EAC9C,CACA,aAAAoyB,CAAcxM,EAAQ5b,EAAMhK,GACxB,OAAO/J,KAAK6S,QAAQrhB,QAAQC,QAAQsY,GAAM5X,MAAM4X,IACrC,CAAE4lB,SAAQ5b,UAAShK,MAElC,CACA,OAAA8I,CAAQ/d,EAASwnC,EAAmB,MAChC,OAAO,IAAInrB,GAAWnR,KAAMA,KAAKu8B,YAAYznC,EAASwnC,OAAkBp7B,GAC5E,CACA,iBAAMq7B,CAAYC,EAAcC,EAAkB9uB,GAC9C,MAAM7Y,QAAgB0nC,EAChB9B,EAAa5lC,EAAQ4lC,YAAc16B,KAAK06B,WACtB,MAApB+B,IACAA,EAAmB/B,SAEjB16B,KAAKi8B,eAAennC,GAC1B,MAAM4nC,IAAEA,EAAGnkC,IAAEA,EAAG+hC,QAAEA,SAAkBt6B,KAAK28B,aAAa7nC,EAAS,CAC3D8nC,WAAYlC,EAAa+B,UAEvBz8B,KAAKk8B,eAAeQ,EAAK,CAAEnkC,MAAKzD,YAEtC,MAAMwb,EAAe,QAAWrd,KAAK4L,UAAY,GAAK,IAAO,GAAGE,SAAS,IAAI89B,SAAS,EAAG,KACnFC,OAAsC57B,IAAxByM,EAAoC,GAAK,cAAcA,IACrE4C,EAAYnI,KAAK4I,MAQvB,GAPApE,GAAU5M,MAAMuM,MAAM,IAAI+D,qBAAiChD,GAAqB,CAC5EK,sBACAgiB,OAAQ76B,EAAQ66B,OAChBp3B,MACAzD,UACA+K,QAAS68B,EAAI78B,WAEb/K,EAAQ0oB,QAAQ/B,QAChB,MAAM,IAAIshB,EAEd,MAAM94B,EAAa,IAAIgX,gBACjB7mB,QAAiB4L,KAAKg9B,iBAAiBzkC,EAAKmkC,EAAKpC,EAASr2B,GAAY+N,MAAM5S,GAC5E69B,EAAc70B,KAAK4I,MACzB,GAAI5c,aAAoBkK,WAAWe,MAAO,CACtC,MAAM69B,EAAe,aAAaT,uBAClC,GAAI3nC,EAAQ0oB,QAAQ/B,QAChB,MAAM,IAAIshB,EAMd,MAAMI,EAAYn+B,EAAa5K,IAC3B,eAAeyiB,KAAK3X,OAAO9K,IAAa,UAAWA,EAAW8K,OAAO9K,EAASoL,OAAS,KAC3F,GAAIi9B,EAQA,OAPA7vB,GAAU5M,MAAMsM,KAAK,IAAIgE,iBAA4B6sB,EAAY,YAAc,cAAcD,KAC7FtwB,GAAU5M,MAAMuM,MAAM,IAAI+D,iBAA4B6sB,EAAY,YAAc,aAAaD,KAAiB5vB,GAAqB,CAC/HK,sBACApV,MACAwY,WAAYksB,EAAc1sB,EAC1BvT,QAAS5I,EAAS4I,WAEfgD,KAAKo9B,aAAatoC,EAAS2nC,EAAkB9uB,GAAuB2C,GAS/E,GAPA1D,GAAU5M,MAAMsM,KAAK,IAAIgE,iBAA4B6sB,EAAY,YAAc,0CAC/EvwB,GAAU5M,MAAMuM,MAAM,IAAI+D,iBAA4B6sB,EAAY,YAAc,yCAA0C7vB,GAAqB,CAC3IK,sBACApV,MACAwY,WAAYksB,EAAc1sB,EAC1BvT,QAAS5I,EAAS4I,WAElBmgC,EACA,MAAM,IAAIE,EAEd,MAAM,IAAIC,EAA0B,CAAE99B,MAAOpL,GACjD,CACA,MAIMmpC,EAAe,IAAIjtB,IAAewsB,IAJjB,IAAI1oC,EAASyL,QAAQ6N,WACvC9E,QAAO,EAAE3J,KAAmB,iBAATA,IACnBrI,KAAI,EAAEqI,EAAMrN,KAAW,KAAOqN,EAAO,KAAO3F,KAAKyD,UAAUnL,KAC3DmW,KAAK,QAC+D20B,EAAI/M,UAAUp3B,KAAOnE,EAASopC,GAAK,YAAc,wBAAwBppC,EAASgE,aAAa6kC,EAAc1sB,MACtL,IAAKnc,EAASopC,GAAI,CACd,MAAMC,QAAoBz9B,KAAKy9B,YAAYrpC,GAC3C,GAAIqoC,GAAoBgB,EAAa,CACjC,MAAMP,EAAe,aAAaT,uBAWlC,anFhPTtuB,eAAoC5J,GACvC,GAAe,OAAXA,GAAqC,iBAAXA,EAC1B,OACJ,GAAIA,EAAOX,OAAOC,eAEd,kBADMU,EAAOX,OAAOC,iBAAiBQ,YAGzC,MAAMG,EAASD,EAAOE,YAChBG,EAAgBJ,EAAOJ,SAC7BI,EAAOG,oBACDC,CACV,CmF4NsB84B,CAA2BtpC,EAAS0Q,MAC1C8H,GAAU5M,MAAMsM,KAAK,GAAGixB,OAAkBL,KAC1CtwB,GAAU5M,MAAMuM,MAAM,IAAI+D,sBAAiC4sB,KAAiB5vB,GAAqB,CAC7FK,sBACApV,IAAKnE,EAASmE,IACdH,OAAQhE,EAASgE,OACjByH,QAASzL,EAASyL,QAClBkR,WAAYksB,EAAc1sB,KAEvBvQ,KAAKo9B,aAAatoC,EAAS2nC,EAAkB9uB,GAAuB2C,EAAclc,EAASyL,QACtG,CACA,MAAMq9B,EAAeO,EAAc,8BAAgC,uBACnE7wB,GAAU5M,MAAMsM,KAAK,GAAGixB,OAAkBL,KAC1C,MAAMS,QAAgBvpC,EAAStD,OAAOkhB,OAAOja,GAAQqH,EAAYrH,GAAKiF,UAChE4gC,EvFxOM,CAAC9sC,IACrB,IACI,OAAOwI,KAAKC,MAAMzI,EACtB,CACA,MAAOiH,GACH,MACJ,GuFkOwB8lC,CAASF,GACnBG,EAAaF,OAAU18B,EAAYy8B,EACzC/wB,GAAU5M,MAAMuM,MAAM,IAAI+D,sBAAiC4sB,KAAiB5vB,GAAqB,CAC7FK,sBACApV,IAAKnE,EAASmE,IACdH,OAAQhE,EAASgE,OACjByH,QAASzL,EAASyL,QAClB7C,QAAS8gC,EACT/sB,WAAY3I,KAAK4I,MAAQT,KAG7B,MADYvQ,KAAKu7B,gBAAgBnnC,EAASgE,OAAQwlC,EAASE,EAAY1pC,EAASyL,QAEpF,CASA,OARA+M,GAAU5M,MAAMsM,KAAKixB,GACrB3wB,GAAU5M,MAAMuM,MAAM,IAAI+D,oBAAgChD,GAAqB,CAC3EK,sBACApV,IAAKnE,EAASmE,IACdH,OAAQhE,EAASgE,OACjByH,QAASzL,EAASyL,QAClBkR,WAAYksB,EAAc1sB,KAEvB,CAAEnc,WAAUU,UAASmP,aAAYqM,eAAc3C,sBAAqB4C,YAC/E,CACA,UAAAkH,CAAW1D,EAAMjB,EAAM/I,GACnB,OAAO/J,KAAKyS,eAAeK,EAAM,CAAE6c,OAAQ,MAAO5b,UAAShK,GAC/D,CACA,cAAA0I,CAAeK,EAAMhe,GACjB,MAAM+d,EAAU7S,KAAKu8B,YAAYznC,EAAS,UAAMoM,GAChD,OAAO,IAAI68B,GAAuB/9B,KAAM6S,EAASC,EACrD,CACA,sBAAMkqB,CAAiBzkC,EAAKylC,EAAMj8B,EAAIkC,GAClC,MAAMuZ,OAAEA,EAAMmS,OAAEA,KAAW76B,GAAYkpC,GAAQ,CAAA,EAC3CxgB,GACAA,EAAOC,iBAAiB,SAAS,IAAMxZ,EAAWoK,UACtD,MAAMisB,EAAUppC,YAAW,IAAM+S,EAAWoK,SAAStM,GAC/Ck8B,EAAkB3/B,WAAWkF,gBAAkB1O,EAAQgQ,gBAAgBxG,WAAWkF,gBAC3D,iBAAjB1O,EAAQgQ,MAAsC,OAAjBhQ,EAAQgQ,MAAiBlB,OAAOC,iBAAiB/O,EAAQgQ,KAC5F21B,EAAe,CACjBjd,OAAQvZ,EAAWuZ,UACfygB,EAAiB,CAAEC,OAAQ,QAAW,CAAA,EAC1CvO,OAAQ,SACL76B,GAEH66B,IAGA8K,EAAa9K,OAASA,EAAOjqB,eAEjC,IAEI,aAAa1F,KAAKmU,MAAMhW,UAAK+C,EAAW3I,EAAKkiC,EACjD,CACR,QACY0D,aAAa7D,EACjB,CACJ,CACA,iBAAMmD,CAAYrpC,GAEd,MAAMgqC,EAAoBhqC,EAASyL,QAAQ3G,IAAI,kBAE/C,MAA0B,SAAtBklC,GAEsB,UAAtBA,IAGoB,MAApBhqC,EAASgE,SAGW,MAApBhE,EAASgE,SAGW,MAApBhE,EAASgE,QAGThE,EAASgE,QAAU,MAG3B,CACA,kBAAMglC,CAAatoC,EAAS2nC,EAAkBnsB,EAAc+tB,GACxD,IAAIC,EAEJ,MAAMC,EAAyBF,GAAiBnlC,IAAI,kBACpD,GAAIqlC,EAAwB,CACxB,MAAMC,EAAYC,WAAWF,GACxBloC,OAAOq1B,MAAM8S,KACdF,EAAgBE,EAExB,CAEA,MAAME,EAAmBL,GAAiBnlC,IAAI,eAC9C,GAAIwlC,IAAqBJ,EAAe,CACpC,MAAMK,EAAiBF,WAAWC,GAK9BJ,EAJCjoC,OAAOq1B,MAAMiT,GAIEv2B,KAAK7O,MAAMmlC,GAAoBt2B,KAAK4I,MAHnB,IAAjB2tB,CAKxB,CAGA,KAAML,GAAiB,GAAKA,GAAiBA,EAAgB,KAAY,CACrE,MAAM5D,EAAa5lC,EAAQ4lC,YAAc16B,KAAK06B,WAC9C4D,EAAgBt+B,KAAK4+B,mCAAmCnC,EAAkB/B,EAC9E,CAEA,aADM54B,EAAMw8B,GACLt+B,KAAKu8B,YAAYznC,EAAS2nC,EAAmB,EAAGnsB,EAC3D,CACA,kCAAAsuB,CAAmCnC,EAAkB/B,GACjD,MAEMmE,EAAanE,EAAa+B,EAKhC,OAHqBxpC,KAAKC,IAJA,GAIwBD,KAAK6rC,IAAI,EAAGD,GAHxC,IAKP,EAAoB,IAAhB5rC,KAAK4L,UACO,GACnC,CACA,kBAAM89B,CAAaoC,GAAcnC,WAAEA,EAAa,GAAM,CAAA,GAClD,MAAM9nC,EAAU,IAAKiqC,IACfpP,OAAEA,EAAM5b,KAAEA,EAAI1W,MAAEA,EAAKu+B,eAAEA,GAAmB9mC,EAC1CyD,EAAMyH,KAAK27B,SAAS5nB,EAAM1W,EAAOu+B,GACnC,YAAa9mC,GvFlZc,EAACmK,EAAM8f,KAC1C,GAAiB,iBAANA,IAAmB1oB,OAAO2oC,UAAUjgB,GAC3C,MAAM,IAAIrf,EAAY,GAAGT,wBAE7B,GAAI8f,EAAI,EACJ,MAAM,IAAIrf,EAAY,GAAGT,+BAErB,EuF4YAggC,CAAwB,UAAWnqC,EAAQwlC,SAC/CxlC,EAAQwlC,QAAUxlC,EAAQwlC,SAAWt6B,KAAKs6B,QAC1C,MAAMv1B,YAAEA,EAAWD,KAAEA,GAAS9E,KAAKk/B,UAAU,CAAEpqC,YAY/C,MAAO,CAAE4nC,IAVG,CACR/M,SACA9vB,cAHqBG,KAAKykB,aAAa,CAAE3vB,QAASiqC,EAAcpP,SAAQ5qB,cAAa63B,kBAIjF9nC,EAAQ0oB,QAAU,CAAEA,OAAQ1oB,EAAQ0oB,WACpClf,WAAWkF,gBACXsB,aAAgBxG,WAAWkF,gBAAkB,CAAE06B,OAAQ,WACvDp5B,GAAQ,CAAEA,WACV9E,KAAKy6B,cAAgB,MACrB3lC,EAAQ2lC,cAAgB,IAElBliC,MAAK+hC,QAASxlC,EAAQwlC,QACxC,CACA,kBAAM7V,EAAa3vB,QAAEA,EAAO66B,OAAEA,EAAM5qB,YAAEA,EAAW63B,WAAEA,IAC/C,IAAIuC,EAAqB,CAAA,EACrBn/B,KAAKo/B,mBAAgC,QAAXzP,IACrB76B,EAAQuqC,iBACTvqC,EAAQuqC,eAAiBr/B,KAAKs7B,yBAClC6D,EAAmBn/B,KAAKo/B,mBAAqBtqC,EAAQuqC,gBAEzD,MAAMx/B,EAAU4kB,GAAa,CACzB0a,EACA,CACIna,OAAQ,mBACR,aAAchlB,KAAKq7B,eACnB,0BAA2Bn8B,OAAO09B,MAC9B9nC,EAAQwlC,QAAU,CAAE,sBAAuBp7B,OAAOjM,KAAKqsC,MAAMxqC,EAAQwlC,QAAU,OAAW,CAAA,KpF3TlGj3B,IAAqBA,EAAmBpB,KoF6TpC,sBAAuBjC,KAAKg4B,aAC5B,iBAAkBh4B,KAAKi4B,eAErBj4B,KAAKi7B,YAAYnmC,GACvBkL,KAAK66B,SAAS0E,eACdx6B,EACAjQ,EAAQ+K,UAGZ,OADAG,KAAKg7B,gBAAgBn7B,GACdA,EAAQyJ,MACnB,CACA,SAAA41B,EAAYpqC,SAASgQ,KAAEA,EAAMjF,QAAS2/B,KAClC,IAAK16B,EACD,MAAO,CAAEC,iBAAa7D,EAAW4D,UAAM5D,GAE3C,MAAMrB,EAAU4kB,GAAa,CAAC+a,IAC9B,OAEAx0B,YAAY0K,OAAO5Q,IACfA,aAAgBkG,aAChBlG,aAAgB26B,UACC,iBAAT36B,GAEJjF,EAAQyJ,OAAOvL,IAAI,iBAEtBO,WAAW2W,MAAQnQ,aAAgBxG,WAAW2W,MAE/CnQ,aAAgB6P,UAEhB7P,aAAgBjM,iBAEfyF,WAAWkF,gBAAkBsB,aAAgBxG,WAAWkF,eAClD,CAAEuB,iBAAa7D,EAAW4D,KAAMA,GAElB,iBAATA,IACXlB,OAAOC,iBAAiBiB,GACpBlB,OAAOE,YAAYgB,GAAQ,SAAUA,GAA6B,mBAAdA,EAAKhT,MACvD,CAAEiT,iBAAa7D,EAAW4D,KAAM46B,EAAyB56B,IAGzD5G,EAAuB8B,KAAMo2B,GAAiB,KAAKj4B,KAAK6B,KAAM,CAAE8E,OAAMjF,WAErF,EAEJvK,GAAKuiC,GAAQzB,GAAkB,IAAItsB,QAAWqsB,GAAoB,IAAIha,QAAWka,GAA4B,WACzG,MAAwB,8BAAjBr2B,KAAK83B,OAChB,EACAD,GAAOA,OAASviC,GAChBuiC,GAAO0C,gBAAkB,IACzB1C,GAAOn4B,YAAcy6B,EACrBtC,GAAOl4B,SAAW67B,EAClB3D,GAAOr3B,mBAAqB88B,EAC5BzF,GAAO12B,0BAA4Bk8B,EACnCxF,GAAO52B,kBAAoB87B,EAC3BlF,GAAOj3B,cAAgB++B,EACvB9H,GAAOh3B,cAAgB++B,EACvB/H,GAAO92B,eAAiB8+B,EACxBhI,GAAOp3B,gBAAkBq/B,EACzBjI,GAAOn3B,oBAAsBq/B,EAC7BlI,GAAO72B,oBAAsBg/B,EAC7BnI,GAAOl3B,sBAAwBs/B,EAC/BpI,GAAO/2B,yBAA2Bo/B,EAClCrI,GAAOv2B,6BAA+B6+B,EACtCtI,GAAOuI,OtErfAjyB,eAAsBvc,EAAOqN,EAAMnK,GAKtC,GAJAue,KAnBe,CAACzhB,GAAmB,MAATA,GACT,iBAAVA,GACe,iBAAfA,EAAMqN,MACiB,iBAAvBrN,EAAMyuC,cACbhrB,GAAWzjB,GAmBP0uC,CAFJ1uC,QAAcA,GAGV,OAAIA,aAAiB0hB,KACV1hB,EAEJ8hB,GAAS,OAAO9hB,EAAM2jB,eAAgB3jB,EAAMqN,MAEvD,GAxBmB,CAACrN,GAAmB,MAATA,GACb,iBAAVA,GACc,iBAAdA,EAAM2G,KACS,mBAAf3G,EAAMojB,KAqBTurB,CAAe3uC,GAAQ,CACvB,MAAMojB,QAAapjB,EAAMojB,OAEzB,OADA/V,IAASA,EAAO,IAAI68B,IAAIlqC,EAAM2G,KAAKioC,SAAS5vB,MAAM,SAASoD,OACpDN,SAAe8B,GAASR,GAAO/V,EAAMnK,EAChD,CACA,MAAM2gB,QAAcD,GAAS5jB,GAE7B,GADAqN,IAASA,EAAO4U,GAAQjiB,KACnBkD,GAASuD,KAAM,CAChB,MAAMA,EAAOod,EAAMiD,MAAM8a,GAAyB,iBAATA,GAAqB,SAAUA,GAAQA,EAAKn7B,OACjE,iBAATA,IACPvD,EAAU,IAAKA,EAASuD,QAEhC,CACA,OAAOqb,GAAS+B,EAAOxW,EAAMnK,EACjC,EsE6dA+iC,GAAO7T,YAAcA,GACrB6T,GAAO3T,KAAOA,GACd2T,GAAOtK,WAAaA,GACpBsK,GAAOhL,MAAQA,GACfgL,GAAO3G,OAASA,GAChB2G,GAAOzS,MAAQA,GACfyS,GAAOvG,YAAcA,GACrBuG,GAAOxG,OAASA,GAChBwG,GAAOrH,WAAaA,GACpBqH,GAAOrI,QAAUA,GACjBqI,GAAOhC,aAAeA,GACtBgC,GAAOvB,SAAWA,GAClBuB,GAAO3L,KAAOA,GACd2L,GAAOlS,QAAUA,GACjBkS,GAAO5D,QAAUwM,GACjB5I,GAAOjE,UAAYA,GACnBiE,GAAOxR,SAAWA,GAClBwR,GAAOxK,cAAgBA,GACvBwK,GAAOhJ,MAAQA,GACfgJ,GAAO/K,WAAaA,GCxiBb,MAAM4T,GAAmD,CAC9D,CAACnsC,EAAmBqG,eAAgB,CAClCqE,KAAM,yBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBqG,gBAC3DkmC,eAAgB,CACdzoC,KAAM,SACNuoC,WAAY,CAAE1rC,MAAO,CAAEmD,KAAM,YAC7B0oC,SAAU,CAAC,SACXC,sBAAsB,IAG1BD,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBkG,iBAAkB,CACpCwE,KAAM,2BACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBkG,kBAC3DqmC,eAAgB,CACdzoC,KAAM,SACNuoC,WAAY,CACVK,QAAS,CACP5oC,KAAM,QACNwE,MAAO,CAAExE,KAAM,aAGnB0oC,SAAU,CAAC,WACXC,sBAAsB,IAG1BD,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBsG,YAAa,CAC/BoE,KAAM,sBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBsG,aAC3DimC,eAAgB,CAAEzoC,KAAM,YAE1B0oC,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBuG,YAAa,CAC/BmE,KAAM,sBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBuG,aAC3DgmC,eAAgB,CAAEzoC,KAAM,WAE1B0oC,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBwG,WAAY,CAC9BkE,KAAM,qBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBwG,YAC3D+lC,eAAgB,CAAEzoC,KAAM,WAE1B0oC,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmByG,OAAQ,CAC1BiE,KAAM,iBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmByG,QAC3D8lC,eAAgB,CAAEzoC,KAAM,WAE1B0oC,SAAU,CAAC,gBAAiB,kBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBoH,OAAQ,CAC1BsD,KAAM,iBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBoH,QAC3DulC,gBAAiB,CACf7oC,KAAM,QACNwE,MAAO,CACLxE,KAAM,SACNuoC,WAAY,CACVO,mBAAoB,CAAE9oC,KAAM,WAC5B+oC,aAAc,CAAE/oC,KAAM,YAExB0oC,SAAU,CAAC,qBAAsB,gBACjCC,sBAAsB,KAI5BD,SAAU,CAAC,gBAAiB,mBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmB0H,qBAAsB,CACxCgD,KAAM,+BACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmB0H,sBAC3DilC,gBAAiB,CACf7oC,KAAM,QACNwE,MAAO,CACLxE,KAAM,SACNuoC,WAAY,CACVS,gBAAiB,CAAEhpC,KAAM,WACzB+oC,aAAc,CAAE/oC,KAAM,YAExB0oC,SAAU,CAAC,kBAAmB,gBAC9BC,sBAAsB,KAI5BD,SAAU,CAAC,gBAAiB,mBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBgI,gBAAiB,CACnC0C,KAAM,0BACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBgI,iBAC3D2kC,gBAAiB,CACf7oC,KAAM,QACNwE,MAAO,CACLxE,KAAM,SACNuoC,WAAY,CACVU,YAAa,CAAEjpC,KAAM,WACrBkpC,gBAAiB,CAAElpC,KAAM,YAE3B0oC,SAAU,CAAC,cAAe,mBAC1BC,sBAAsB,KAI5BD,SAAU,CAAC,gBAAiB,mBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBqI,UAAW,CAC7BqC,KAAM,oBACN6Z,QAAQ,EACR6nB,OAAQ,CACNtoC,KAAM,SACNuoC,WAAY,CACVpmC,cAAe,CAAEnC,KAAM,SAAUwoC,KAAM,CAACtsC,EAAmBqI,WAC3D4kC,cAAe,CACbnpC,KAAM,SACNuoC,WAAY,CACVK,QAAS,CACP5oC,KAAM,QACNwE,MAAO,CAAExE,KAAM,aAGnB0oC,SAAU,CAAC,WACXC,sBAAsB,IAG1BD,SAAU,CAAC,gBAAiB,iBAC5BC,sBAAsB,IAG1B,CAACzsC,EAAmBktC,cAAUvgC,GC1LhC,SAASwgC,GAAkBC,GACzB,MAAMC,EAAkB,GAClBv2B,EAAQ3U,MAAMC,KAAKgrC,EAAM5sC,iBAAiB,OAC1C8sC,EAA6B,GAEnCx2B,EAAMzU,KAAIgV,IACR,MACMk2B,EADQprC,MAAMC,KAAKiV,EAAK7W,iBAAiB,WACpB6B,KAAI,CAACmrC,EAAM7sC,WACpC,MAAMW,EAA0B,QAAhBP,EAAAysC,EAAKxsC,mBAAW,IAAAD,OAAA,EAAAA,EAAEZ,OAElC,OADAmtC,EAAiB3sC,GAASjC,KAAK+uC,IAAIH,EAAiB3sC,IAAU,GAAGW,aAAO,EAAPA,EAASpD,SAAU,GAC7EoD,QAAAA,EAAW,EAAE,IAEtB+rC,EAAI7uC,KAAK+uC,EAAa,IAGxB,MACMG,EAAmBL,EAAI,GAAGnvC,OAC1ByvC,EACJL,EAAiBnrB,QAAO,CAAC/c,EAAGC,IAAMD,EAAIC,GAAG,GAA8BuoC,GAAxBF,EAAmB,GAC9DG,EAAiB,KAAO1rC,MAAMwrC,GAAoBhN,KAAK,KAAKntB,KAAK,IAAM,KAEvEs6B,EAAYT,EAAIhrC,KAAIgV,GACLA,EAAKhV,KAAI,CAACf,EAASX,IACpCW,EAAQysC,OACNT,EAAiB3sC,GACjB,OAGc6S,KAbH,SAkBjB,OAFas6B,EAAU5yB,QAET2yB,EAAiBC,EAAUt6B,KAAK,KAChD,CC9BA,SAASw6B,GAAgBxsC,EAAgB1B,GACnC0B,EAAO9E,OAAOJ,EAAiB,uBACnCiS,UAAU0/B,UAAUC,UAAUpuC,EAAUD,SAC1C,CCGA,SAASsuC,GACP3sC,EACA4sC,EACAtuC,GAEA,MAAMY,EAAQ0tC,EAAU,GAExB,GACuB,IAArBA,EAAUlwC,SApBd,SAA2Be,GACzB,MAAMovC,EAAkBpvC,EAAQmJ,aAAa,mBAC7C,MAAkC,iBAApBimC,GAAoD,UAApBA,CAChD,CAkBKC,CAAkB5tC,GAEnB,OAAO,EAGT,MAAM6tC,EACJzuC,EAAUD,UAAY,mBAAoBC,EAAUD,SAChD8K,OAAQ7K,EAAUD,SAAiB0sC,gBACnCzsC,EAAU0uC,YAEhB,GAAIhtC,EAAOitC,OAAQ,CACjB,IAAI9tC,EAAQ,EAEZ,MAAM+tC,EAAe,SAAUl0B,GAG7B,GAFAA,EAAMm0B,iBAEY,cAAdn0B,EAAMjV,KAAuB5E,GAAS4tC,EAAWrwC,OAEnD,YADAwC,EAAMkuC,oBAAoB,UAAWF,GAIvChuC,EAAMM,YAAcutC,EAAWrnC,MAAM,IAAKvG,GAG1CD,EAAMmuC,QACN,MAAMC,EAAQryC,SAASsyC,cACvBD,EAAME,mBAAmBtuC,GACzBouC,EAAMG,UAAS,GACf,MAAMC,EAAYpJ,OAAOqJ,eACP,OAAdD,IACFA,EAAUE,kBACVF,EAAUG,SAASP,GAEvB,EAEApuC,EAAMwoB,iBAAiB,UAAWwlB,EACpC,MACEhuC,EAAMM,YAAcutC,EAGtB,OAAO,CACT,CCvDA,SAASe,GACP9tC,EACA4sC,EACAtuC,WAEA,MAAMY,EAAQ0tC,EAAU,GAExB,GACuB,IAArBA,EAAUlwC,QACK,WAAfwC,EAAMoD,KAEN,OAAO,EAGT,MAIMyrC,UAASruC,UAAAH,GAHbjB,EAAUD,UAAY,mBAAoBC,EAAUD,SAChD8K,OAAQ7K,EAAUD,SAAiB0sC,gBACnCzsC,EAAU0uC,aACY3sC,MAAM,yCAAqB,yBAAIxD,QAAQ,IAAK,KAExE,QAAesO,IAAX4iC,EAAsB,OAAO,EAEjC,GAAI/tC,EAAOitC,OAAQ,CACjB,IAAI9tC,EAAQ,EAEZ,MAAM6uC,EAAe,SAAUh1B,GAC7BA,EAAMm0B,iBAC6B,cAAfn0B,EAAOjV,KAAuB5E,GAAS4uC,EAAOrxC,OAChEwC,EAAMkuC,oBAAoB,UAAWY,IAIA,MAAnCD,EAAOroC,MAAMvG,EAAOA,EAAQ,MAAcA,EAE9CD,EAAMrD,MAAQkyC,EAAOroC,MAAM,IAAKvG,GAClC,EAEAD,EAAMwoB,iBAAiB,UAAWsmB,EACpC,MACE9uC,EAAMrD,MAAQkyC,EAGhB,OAAO,CACT,CCpCA,SAASE,GACPjuC,EACA4sC,EACAtuC,GAEA,MAAM4vC,EAAatB,eAAAA,EAAY,GAG/B,IAAKsB,GAAkC,UAApBA,EAAW5rC,KAC5B,OAAO,EAGT,IAAI6rC,EAAwC,KAE5C,GAAI7vC,EAAUD,UAAYC,EAAUD,SAASoG,gBAAkBjG,EAAmBqG,cAAe,CAC/F,MACM1F,EADMb,EAAUD,SACJ0sC,eAAe5rC,MAC7BA,GAAS,GAAKA,EAAQytC,EAAUlwC,SAClCyxC,EAAevB,EAAUztC,GAE7B,MAAO,GACLb,EAAUD,UACVC,EAAUD,SAASoG,gBAAkBjG,EAAmBsG,WACxD,CACA,MAIMspC,GAAgC,IAJ1B9vC,EAAUD,SAIH0sC,eAIbsD,EAAkB1tC,MAAMC,KAAKgsC,GAChC/rC,KAAIytC,YAAO,MAAA,CACV7wC,QAAS6wC,EACTzyC,MAAO4C,EAA6C,QAA/BiB,EAAkB,QAAlBH,EAAA+uC,aAAG,EAAHA,EAAK3uC,qBAAa,IAAAJ,OAAA,EAAAA,EAAEC,mBAAW,IAAAE,EAAAA,EAAI,IACzD,IACAmT,QAAOlV,GAAqB,KAAdA,EAAI9B,QAEfoC,EAAaZ,EAAgB+wC,EAAS,OAAS,QAASC,GAC9DF,EAAelwC,EAAWR,OAC5B,KAAO,CAEL,MAAM4wC,EAAkB1tC,MAAMC,KAAKgsC,GAChC/rC,KAAIytC,YAAO,MAAA,CACV7wC,QAAS6wC,EACTzyC,MAAO4C,EAA6C,QAA/BiB,EAAkB,QAAlBH,EAAA+uC,aAAG,EAAHA,EAAK3uC,qBAAa,IAAAJ,OAAA,EAAAA,EAAEC,mBAAW,IAAAE,EAAAA,EAAI,IACzD,IACAmT,QAAOlV,GAAqB,KAAdA,EAAI9B,QAEfoC,EAAaZ,EAAgBiB,EAAU0uC,YAAaqB,GAEtDruC,EAAOyC,MAAQxE,EAAWpC,OAC5BgC,EAAKI,WAAWA,EAAWpC,MAAOoC,EAAWP,YAE/CywC,EAAelwC,EAAWR,OAC5B,CAYA,OAVI0wC,IACEnuC,EAAOuuC,UACTJ,EAAazmB,iBAAiB,aAAa,IAAOymB,EAAkCK,SAAS,CAC3FvoB,MAAM,IAGRkoB,EAAaK,UAIV,CACT,CCzEA,SAASC,GACPzuC,EACA4sC,EACAtuC,GAEA,MAAM4vC,EAAatB,eAAAA,EAAY,GAG/B,IAAKsB,GAAkC,aAApBA,EAAW5rC,KAC5B,OAAO,EAGT,MAAMosC,EAAyC,IAAIx4B,IAGnD,GACE5X,EAAUD,UACVC,EAAUD,SAASoG,gBAAkBjG,EAAmBkG,gBACxD,CACA,MAAMrG,EAAWC,EAAUD,SACrBswC,EAAiB,IAAIz4B,IAAI7X,EAAS0sC,eAAeG,SAEvDvqC,MAAMC,KAAKgsC,GAAW3tC,SAAQ,CAACqvC,EAAKnvC,KAClC,MAAM1B,EAAU6wC,EACZK,EAAe3mC,IAAI7I,IACrBuvC,EAAgBzpB,IAAIxnB,EACtB,IAGEuC,EAAOyC,MACT1E,QAAQC,IAAI,+CAAgDK,EAAS0sC,eAAeG,QAExF,KAEK,CACH,MAAM0D,EAAWtwC,EAAU0uC,YAAYnyB,MAAM,MAEvCwzB,EAAkB1tC,MAAMC,KAAKgsC,GAChC/rC,KAAIytC,YAAO,MAAA,CACV7wC,QAAS6wC,EACTzyC,MAAO4C,EAA6C,QAA/BiB,EAAkB,QAAlBH,EAAA+uC,aAAG,EAAHA,EAAK3uC,qBAAa,IAAAJ,OAAA,EAAAA,EAAEC,mBAAW,IAAAE,EAAAA,EAAI,IACzD,IACAmT,QAAOlV,GAAqB,KAAdA,EAAI9B,QAErB,IAAK,MAAMgzC,KAAWD,EAAU,CAC9B,MAAM3wC,EAAaZ,EAAgBwxC,EAASR,GAExCruC,EAAOyC,MAAQxE,EAAWpC,OAC5BgC,EAAKI,WAAWA,EAAWpC,MAAOoC,EAAWP,YAG/CgxC,EAAgBzpB,IAAIhnB,EAAWR,QACjC,CACF,CAGA,IAAK,MAAM6wC,KAAO3tC,MAAMC,KAAKgsC,GAAY,CACvC,MAAMnvC,EAAU6wC,EACVQ,EACHrxC,EAAQsxC,UAAYL,EAAgB1mC,IAAIvK,KACvCA,EAAQsxC,SAAWL,EAAgB1mC,IAAIvK,GAErCuxC,EAAS,IAAMF,GAAcrxC,EAAQ+wC,QAEvCxuC,EAAOuuC,UACT9wC,EAAQiqB,iBAAiB,YAAasnB,EAAQ,CAC5C/oB,MAAM,IAGR+oB,GAEJ,CAEA,OAAO,CACT,CC1EA,SAASC,GACPjvC,EACA4sC,EACAtuC,GAEA,GAAyB,IAArBsuC,EAAUlwC,QAAyC,WAAzBkwC,EAAU,GAAGsC,QAAsB,OAAO,EAExE,MAKMN,GAJJtwC,EAAUD,UAAY,mBAAoBC,EAAUD,SAChD8K,OAAQ7K,EAAUD,SAAiB0sC,gBACnCzsC,EAAU0uC,aAEanyB,MAAM,MAE/B7a,EAAOyC,MAAM5E,EAAKO,MAAMwwC,GAE5B,IAAK,IAAI7xC,EAAI,EAAGA,EAAI6vC,EAAUlwC,QACvBkyC,EAAS7xC,KADwBA,EAAG,CAGzC,MAAMgC,EAAU6tC,EAAU7vC,GAAGiC,iBAAiB,UAExCqvC,EAAkB1tC,MAAMC,KAAK7B,GAChC2G,MAAM,GACN7E,KAAI8E,UAAO,MAAA,CACVlI,QAASkI,EACT9J,MAAO4C,EAA6B,QAAfc,EAAAoG,EAAInG,mBAAW,IAAAD,EAAAA,EAAI,IACzC,IACAsT,QAAOlV,GAAqB,KAAdA,EAAI9B,QAEfoC,EAAaZ,EAAgBuxC,EAAS7xC,GAAIsxC,GAE5CruC,EAAOyC,MAAQxE,EAAWpC,OAC5BgC,EAAKI,WAAWA,EAAWpC,MAAOoC,EAAWP,YAG/C,MAAMyxC,EAAgBlxC,EAAWR,QAC3B2xC,EAAgBD,EAAc/qC,QAAQ,UAEtB,OAAlBgrC,IAEApvC,EAAOuuC,UACTa,EAAc1nB,iBAAiB,SAAS,IAAOynB,EAAcE,UAAW,GAAO,CAC7EppB,MAAM,IAGRkpB,EAAcE,UAAW,EAE7B,CAEA,OAAO,CACT,CCrDA,SAASC,GACPtvC,EACA4sC,EACAtuC,GAEA,MAAMY,EAAQ0tC,EAAU,GAExB,GACuB,IAArBA,EAAUlwC,QACS,aAAlBwC,EAAMgwC,SAAyC,SAAfhwC,EAAMoD,KAEvC,OAAO,EAGT,MAAMyqC,EACJzuC,EAAUD,UAAY,mBAAoBC,EAAUD,SAChD8K,OAAQ7K,EAAUD,SAAiB0sC,gBACnCzsC,EAAU0uC,YAEhB,GAAIhtC,EAAOitC,OAAQ,CACjB,IAAI9tC,EAAQ,EAEZ,MAAM+tC,EAAe,SAAUl0B,GAC7BA,EAAMm0B,iBAE6B,cAAfn0B,EAAOjV,KAAuB5E,GAAS4tC,EAAWrwC,OACpEwC,EAAMkuC,oBAAoB,UAAWF,GAIvChuC,EAAMrD,MAAQkxC,EAAWrnC,MAAM,IAAKvG,EACtC,EAEAD,EAAMwoB,iBAAiB,UAAWwlB,EACpC,MACEhuC,EAAMrD,MAAQkxC,EAGhB,OAAO,CACT,CCtCA,SAASwC,GACPvvC,EACA4sC,EACAtuC,GAEA,MAAMY,EAAQ0tC,EAAU,GAExB,IAAK1tC,EAAMmF,UAAUC,SAAS,sBAC5B,OAAO,EAGT,MAAMkrC,EAAStwC,EAAMG,cAAc,UACnC,KAAKmwC,GAAWA,EAAOC,iBAAoBD,EAAOC,gBAAgB1gC,MAASygC,EAAOE,eAChF,OAAO,EAET,MAEMC,EAFaH,EAAOC,gBAAgB1gC,KAET1P,cAAc,KAC/C,IAAKswC,EAAe,OAAO,EAE3B,MAAM5C,EACJzuC,EAAUD,UAAY,mBAAoBC,EAAUD,SAChD8K,OAAQ7K,EAAUD,SAAiB0sC,gBACnCzsC,EAAU0uC,YAEhB,GAAIhtC,EAAOitC,OAAQ,CACjB,IAAI9tC,EAAQ,EACZ,MAAM+tC,EAAe,SAAUl0B,GAG7B,GAFAA,EAAMm0B,iBAEY,cAAdn0B,EAAMjV,KAAuB5E,GAAS4tC,EAAWrwC,OAEnD,YADA8yC,EAAOE,cAAetC,oBAAoB,UAAWF,GAKvD,MAAM0C,EAAW30C,SAAS40C,eAAe9C,EAAWh7B,OAAO5S,MAC3DwwC,EAAcG,YAAYF,GAG1B,MAAMtC,EAAQkC,EAAOC,gBAAiBlC,cACtCD,EAAME,mBAAmBmC,GACzBrC,EAAMG,UAAS,GACf,MAAMC,EAAY8B,EAAOE,cAAe/B,eACpCD,IACFA,EAAUE,kBACVF,EAAUG,SAASP,IAGrBkC,EAAOE,cAAerC,OACxB,EAEAmC,EAAOE,cAAchoB,iBAAiB,UAAWwlB,EACnD,MACEyC,EAAcnwC,aAAeutC,EAG/B,OAAO,CACT,CChEc,SAAUgD,GACtB/vC,EACA4sC,EACAtuC,GAEA,IAAKA,EAAUD,UAAYC,EAAUD,SAASoG,gBAAkBjG,EAAmBoH,MACjF,OAAO,EAET,MAAMvH,EAAWC,EAAUD,SACrByH,EAAUnF,MAAMC,KAAKgsC,GAAW/5B,QACpCm9B,GAAqB,WAAfA,EAAGd,UAGX,IAAK,MAAM5xC,KAAUe,EAAS8sC,gBAAiB,CAC7C,MAAM8E,EAAWnqC,EAAQxI,EAAO8tC,oBAChC,IAAK6E,EAAU,SAEf,MACMd,EADUc,EAASjxC,iBAAiB,UACZ1B,EAAO+tC,aAAe,GAEhD8D,IACEnvC,EAAOuuC,UACT0B,EAASvoB,iBAAiB,SAAS,IAAOynB,EAAcE,UAAW,GAAO,CAAEppB,MAAM,IAElFkpB,EAAcE,UAAW,EAG/B,CAEA,OAAO,CACT,CC9Bc,SAAUa,GACtBlwC,EACA4sC,EACAtuC,GAEA,IACGA,EAAUD,UACXC,EAAUD,SAASoG,gBAAkBjG,EAAmB0H,oBAExD,OAAO,EAET,MAAM7H,EAAWC,EAAUD,SACrByH,EAAUnF,MAAMC,KAAKgsC,GAAW/5B,QACpCm9B,GAAqB,WAAfA,EAAGd,UAGX,IAAK,MAAM5xC,KAAUe,EAAS8sC,gBAAiB,CAC7C,MAAM8E,EAAWnqC,EAAQxI,EAAOguC,iBAChC,IAAK2E,EAAU,SAEf,MACMd,EADUc,EAASjxC,iBAAiB,UACZ1B,EAAO+tC,aAAe,GAEhD8D,IACEnvC,EAAOuuC,UACT0B,EAASvoB,iBAAiB,SAAS,IAAOynB,EAAcE,UAAW,GAAO,CAAEppB,MAAM,IAElFkpB,EAAcE,UAAW,EAG/B,CAEA,OAAO,CACT,CCjCc,SAAUc,GACtBnwC,EACA4sC,EACAtuC,GAEA,IAAKA,EAAUD,UAAYC,EAAUD,SAASoG,gBAAkBjG,EAAmBgI,eACjF,OAAO,EAET,MAAMnI,EAAWC,EAAUD,SACrB+xC,EAAezvC,MAAMC,KAAKgsC,GAAW/5B,QAAOm9B,GAChDA,EAAG3rC,UAAUC,SAAS,gBAGxB,IAAK,MAAMhH,KAAUe,EAAS8sC,gBAAiB,CAC7C,MAAMkF,EAAcD,EAAa9yC,EAAOiuC,aACxC,IAAK8E,EAAa,SAElB,MAAMlsC,EAAYksC,EAAYjsC,QAAQ,QACtC,IAAKD,EAAW,SAEhB,MACMmsC,EADYnsC,EAAUnF,iBAAiB,sBAChB1B,EAAOkuC,iBACpC,IAAK8E,EAAY,SAEjB,MAAMC,EAAcD,EAAWE,UAAUnwC,MAAM,eAC/C,IAAKkwC,EAAa,SAElB,MAAME,EAAcF,EAAY,GAChCF,EAAYx0C,MAAQ40C,EAGpB,MAAMC,EAAYvsC,EAAU9E,cAAc,SAAS/B,EAAOiuC,YAAc,UACpEmF,IACFA,EAAUlxC,YAAc8wC,EAAW9wC,YAEvC,CAEA,OAAO,CACT,CCtCc,SAAUmxC,GACtB3wC,EACA4sC,EACAtuC,GAEA,IAAKA,EAAUD,UAAYC,EAAUD,SAASoG,gBAAkBjG,EAAmBqI,SACjF,OAAO,EAET,MAAMxI,EAAWC,EAAUD,SAGrBuyC,EAAejwC,MAAMC,KAAKgsC,GAAWjqB,MAAKqtB,GAAMA,EAAG3rC,UAAUC,SAAS,kBAC5E,IAAKssC,EAAc,OAAO,EAE1B,MAAMzsC,EAAYysC,EAAaxsC,QAAQ,QACvC,IAAKD,EAAW,OAAO,EAEvB,MAAM2C,EAAQnG,MAAMC,KAAKgwC,EAAa5xC,iBAAiB,oBAGjD6xC,EAA2B,GAC3BC,EAA8B,GAEpC,IAAK,MAAM3xC,KAASd,EAASotC,cAAcP,QAAS,CAClD,MAAMvkC,EAAOG,EAAM3H,GACdwH,IACLkqC,EAAe7zC,KAAK2J,EAAKrH,IACzBwxC,EAAa9zC,KAAK2J,GACpB,CAGA,MAAM0pC,EAAclsC,EAAU9E,cAC5B,4CAaF,OAXIgxC,IACFA,EAAYx0C,MAAQg1C,EAAe7+B,KAAK,MAM1C8+B,EAAa7xC,SAAQ0H,IACnBiqC,EAAad,YAAYnpC,EAAK,KAGzB,CACT,CC9BA,SAAeoqC,GAAMz2B,4CACfA,EAAMta,OAAOqd,SAAQ/C,EAAMzb,gBAAgBmyC,MAAM3zB,OAAS,QAE9D,MAAMvf,ECfR,SAAoCmzC,GAClC,IAAInzC,EAAWmzC,EAAkBC,UAGjC,MAAMC,EACJF,EAAkBjyC,iBAAiB,eACrC,IAAK,MAAMoyC,KAAWD,EACpBrzC,EAAWA,EAASjB,QAAQu0C,EAAQF,UAAW,IAEjD,MAAMG,EAAWJ,EAAkB5xC,cAAc,uBAC7CgyC,IACFvzC,EAAWA,EAASjB,QAASw0C,EAAyBH,UAAW,KAEnE,MAAMI,EAAgBL,EAAkB5xC,cAAc,mBAClDiyC,IAAexzC,EAAWA,EAASjB,QAASy0C,EAA8BJ,UAAW,KAGzF,MAAMK,EAAuCN,EAAkBjyC,iBAAiB,gBAChF,IAAK,MAAM4sC,KAAS2F,EAClBzzC,EAAWA,EAASjB,QAAQ+uC,EAAMsF,UAAW,KAAOvF,GAAkBC,GAAS,MAGjF,OAAOntC,EAAcX,GAAU,EACjC,CDRmB0zC,CAA2Bl3B,EAAMwE,MAC5C8tB,EAAqCtyB,EAAMwE,KAAK9f,iBAAiBsb,EAAMm3B,YAEvEnzC,QEbR,SACE0B,EACAnB,EACAf,kDAEA,MAAMoQ,EAAa,IAAIgX,gBACjBwsB,EAAmBv2C,YAAW,IAAM+S,EAAWoK,SAAuC,KAA7BtY,EAAO2xC,cAAgB,KAIhFC,QAAuB5tC,EAAsBhE,EAAQnB,EAAiBf,GAEtE8Y,EAAS,IAAIkrB,GAAO,CACxBE,OAAQhiC,EAAOgiC,OACfD,QAAS/hC,EAAO+hC,QAChBG,QAASliC,EAAO6xC,UAChBxN,yBAAyB,IAGrByN,EAAeF,EAAetqC,MAChCsqC,EAAetqC,MAAM7C,cACrBjG,EAAmBktC,QACjBqG,EACJD,IAAiBtzC,EAAmBktC,QAAUf,GAAgBmH,QAAgB3mC,EAE1E6mC,EAAsB,CAC1BxxC,MAAOR,EAAOQ,MACd6G,SAAUuqC,EAAevqC,SAASxG,KAAIyJ,GAAOf,OAAA+jB,OAAA,CAAA,EAAMhjB,KACnD2nC,sBAAuBjyC,EAAOkyC,WAAa,KAGzCH,IACFC,EAAejwB,gBAAkB,CAC/Bzf,KAAM,eAGJ0vC,EAAe3qC,SAAS3K,OAAS,GAAyC,WAApCs1C,EAAe3qC,SAAS,GAAGxH,OACnEmyC,EAAe3qC,SAAS,GAAGvH,SAAW,kJAAkJyD,KAAKyD,UAAU+qC,EAAc,KAAM,OAI/N,MAAMpL,QAAY/vB,EAAO+Q,KAAKC,YAAYxH,OC/CtC,SAAgB5f,EAAe2J,GACnC,IAAgC,IAA5B3J,EAAMwC,OAAO,WAAmB,OAAOmH,EAEvCA,EAAKgoC,oBAAoBhoC,EAAKgoC,YAE9BhoC,EAAKioC,cAAcjoC,EAAKioC,MAE5B,IAAK,MAAMnrC,KAAWkD,EAAK9C,SACJ,WAAjBJ,EAAQpH,OAAmBoH,EAAQpH,KAAO,QAGhD,OAAOsK,CACT,CDmCmDkoC,CAAMryC,EAAOQ,MAAOwxC,GAAiB,CACpFvqB,OAAQznB,EAAOukC,QAAUr2B,EAAWuZ,OAAS,OAG/C2gB,aAAasJ,GAEb,MAAM1E,EAA4C,QAA9BztC,EAAAonC,EAAIxkB,QAAQ,GAAGlb,QAAQnH,eAAO,IAAAP,EAAAA,EAAI,GACtD,IAAI+yC,EAAoD,KAExD,GAAIP,EACF,IACE,MAAMQ,EAAkBvF,EACrBnwC,QAAQ,uCAAwC,MAChDA,QAAQ,qBAAsB,IAC9B8B,OACH2zC,EAAqB/uC,KAAKC,MAAM+uC,EAClC,CAAE,MAAOv2C,GACP+B,QAAQ2E,MAAM,2CAA4C1G,EAC5D,CAQF,MAJ2C,mBAAhC41C,EAAerqC,cACxBqqC,EAAerqC,aAAaylC,GAGvB,CACLwF,cAAeZ,EAAetqC,MAC9BjJ,SAAUi0C,EACVtF,YAAaA,EAEjB,GAAC,CF3DyByF,CAAmBn4B,EAAMta,OAAQsa,EAAMzb,gBAAiBf,GAAUme,OACxFvZ,IAAK,CACHA,YAIEgwC,EAAiC,iBAAdp0C,GAA0B,UAAWA,EAM9D,GAJIgc,EAAMta,OAAOqd,SACf/C,EAAMzb,gBAAgBmyC,MAAM3zB,OAAS/C,EAAMta,OAAO2yC,UAAYD,EAAY,UAAY,WAGpFA,EACF30C,QAAQ2E,MAAMpE,EAAUoE,YAS1B,OALI4X,EAAMta,OAAOyC,OACf5E,EAAKC,SAASA,GACdD,EAAKQ,SAASC,IAGRgc,EAAMta,OAAO4yC,MACnB,IAAK,aIlCT,SAAuBt4B,GAChBA,EAAMta,OAAO2yC,UAAUr4B,EAAMu4B,iBAClCrG,GAAgBlyB,EAAMta,OAAQsa,EAAMhc,UACtC,CJgCMw0C,CAAc,CACZ9yC,OAAQsa,EAAMta,OACdnB,gBAAiByb,EAAMzb,gBACvBP,YACAu0C,eAAgBv4B,EAAMu4B,iBAExB,MACF,IAAK,sBK7CT,SAA8Bv4B,SAC5B,MAAMzb,EAAkByb,EAAMzb,gBAE9Byb,EAAMu4B,iBAEN,MAAME,EAA0C,QAAzBxzC,EAAAV,EAAgBm0C,iBAAS,IAAAzzC,EAAAA,EAAI,GACpDV,EAAgBm0C,UAAY14B,EAAMhc,UAAUD,SAC5CQ,EAAgBmyC,MAAMiC,WAAa,WAGnCp0C,EAAgB6oB,iBAAiB,SAAS,WACxC,MAAMwrB,EAAoBr0C,EAAgBm0C,YAAc14B,EAAMhc,UAAUD,SAExEQ,EAAgBmyC,MAAMiC,WAAaC,EAAoB,UAAY,WACnEr0C,EAAgBm0C,UAAYE,EAAoBH,EAAiBz4B,EAAMhc,UAAUD,QACnF,GACF,CL8BM80C,CAAqB,CACnB70C,YACAO,gBAAiByb,EAAMzb,gBACvBg0C,eAAgBv4B,EAAMu4B,iBAExB,MACF,IAAK,gBMpCT,SAA0Bv4B,GACnBA,EAAMta,OAAO2yC,UAAUr4B,EAAMu4B,iBAElC,MAAMO,EAAW,CACf7D,GACA5C,GACA2C,GACAxB,GACAiC,GACAG,GACAC,GACAQ,GACA1B,GACAhB,GACAQ,IAGF,IAAK,MAAM4E,KAAWD,EACpB,GAAIC,EAAQ/4B,EAAMta,OAAQsa,EAAMsyB,UAAWtyB,EAAMhc,WAAY,OAI/DkuC,GAAgBlyB,EAAMta,OAAQsa,EAAMhc,UACtC,CNcMg1C,CAAiB,CACftzC,OAAQsa,EAAMta,OACd1B,YACAsuC,YACA/tC,gBAAiByb,EAAMzb,gBACvBg0C,eAAgBv4B,EAAMu4B,iBAI9B,GAAC,COlED,MAAMU,GAAwB,GACxB1tB,GAAwB,GAqB9B,SAASgtB,GAAep1C,GACtB,MAAM0B,EAAQ0mB,GAAUC,WAAUF,GAAYA,EAASnoB,UAAYA,IACnE,IAAc,IAAV0B,EAAc,CAChB,MAAMymB,EAAWC,GAAUG,OAAO7mB,EAAO,GAAG,GAC5CymB,EAASnoB,QAAQ2vC,oBAAoB,QAASxnB,EAAS9V,GACzD,CACF,CAOA,SAAS0jC,GAAexzC,GAEtB,GAAI6lB,GAAUnpB,OAAS,EAAG,CACxB,IAAK,MAAMkpB,KAAYC,GACjB7lB,EAAOqd,SAAQuI,EAASnoB,QAAQuzC,MAAM3zB,OAAS,WACnDuI,EAASnoB,QAAQ2vC,oBAAoB,QAASxnB,EAAS9V,IAIzD,OAFI9P,EAAO9E,OAAOJ,EAAiB,gBACnC+qB,GAAUnpB,OAAS,EAErB,CAGA,MAGM+0C,EAHiB,CAAC,WAAY,QAAS,OAAQ,UAClD5wC,KAAI7E,GAAK,eAAeA,QACxBgW,KAAK,KAGN,yFACIyhC,EAAQx4C,SAAS+D,iBAAiB,gBAGxC,IAAK,MAAM8f,KAAQ20B,EAAO,CACxB,MAAM50C,EAAsCigB,EAAKzf,cAAc,UAE/D,GAAwB,OAApBR,EAA0B,SAE1BmB,EAAOqd,SAAQxe,EAAgBmyC,MAAM3zB,OAAS,WAElD,MAAMq2B,EAAoB3C,GAAMtoC,KAAK,KAAM,CACzCzI,SACAnB,kBACAigB,KAAMA,EACN2yB,aACAoB,eAAgB,IAAMA,GAAeh0C,KAGvCgnB,GAAU7oB,KAAK,CAAES,QAASoB,EAAiBiR,GAAI4jC,IAC/C70C,EAAgB6oB,iBAAiB,QAASgsB,EAC5C,CAEI1zC,EAAO9E,OAAOJ,EAAiB,WACrC,CCnFA64C,OAAOC,QAAQC,KAAK1wC,IAAI,CAAC,cAAc/G,MAAK,SAAUw3C,GACpD,MAAM5zC,EAAiB4zC,EAAQE,UAE/B,IAAK9zC,EAAQ,MAAM,IAAIsJ,MAAM,iDAEzBtJ,EAAOoK,KDQb,SAAsBpK,GACpB/E,SAAS8T,KAAK2Y,iBAAiB,WAAW,SAAU1O,GAClDu6B,GAAYv2C,KAAKgc,EAAMjV,KACnBwvC,GAAY72C,OAASsD,EAAOoK,KAAM1N,QAAQ62C,GAAY75B,QACtD65B,GAAYvhC,KAAK,MAAQhS,EAAOoK,OAClCmpC,GAAY72C,OAAS,EACrB82C,GAAexzC,GAEnB,GACF,CChBI+zC,CAAa/zC,GAEbwzC,GAAexzC,EAEnB","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/question_types/assay_plain_text.html b/question_types/essay_plain_text.html similarity index 100% rename from question_types/assay_plain_text.html rename to question_types/essay_plain_text.html diff --git a/src/background/core/get-content-with-history.ts b/src/background/core/get-content-with-history.ts index 45e8369..478a2a4 100644 --- a/src/background/core/get-content-with-history.ts +++ b/src/background/core/get-content-with-history.ts @@ -18,7 +18,7 @@ You are an expert quiz solver. Please solve the provided question based on its type and provide the correct result. - For choice questions, output the exact index(es) of the correct answer(s). - For text/numerical questions, provide the exact wording or number. -- For essay questions, provide a highly detailed and complete response. +- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied. Always output strict JSON according to the requested schema block. `.trim(); diff --git a/src/background/core/parse-question.ts b/src/background/core/parse-question.ts index 8f75824..60acbb8 100644 --- a/src/background/core/parse-question.ts +++ b/src/background/core/parse-question.ts @@ -96,10 +96,28 @@ export function parseMoodleQuestion( } if (container.classList.contains('essay')) { - return { + let format: 'plain_text' | 'html' = 'plain_text'; + let initial_text = ''; + + const editorDiv = container.querySelector('.qtype_essay_editor'); + if (editorDiv) format = 'html'; + + const textarea = container.querySelector('textarea'); + if (textarea) { + initial_text = textarea.value || textarea.textContent || ''; + initial_text = normalizeText(initial_text); + } + + const payload: MoodleQuestionQuery = { question_type: MoodleQuestionType.ESSAY, - question_text: normalizedQuestionText + question_text: normalizedQuestionText, + format }; + if (initial_text) { + (payload as any).initial_text = initial_text; + } + + return payload; } if (container.classList.contains('match')) { diff --git a/src/background/types/question-types.ts b/src/background/types/question-types.ts index c93d5e9..acb46b6 100644 --- a/src/background/types/question-types.ts +++ b/src/background/types/question-types.ts @@ -49,6 +49,8 @@ export interface NumericalQuery { export interface EssayQuery { question_type: MoodleQuestionType.ESSAY; question_text: string; + format: 'plain_text' | 'html'; + initial_text?: string; } export interface MatchQuery { From b0873f3ed3d9a4480579b540d838b266ddf6f4e7 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 18 Apr 2026 02:02:16 +0200 Subject: [PATCH 07/12] Refactor: Use native json_schema structured output, remove manual schema injection --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- .../core/get-content-with-history.ts | 3 +-- src/background/core/get-response.ts | 26 ++++++++----------- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index c4d8cd2..6f04a24 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver. \nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\nAlways output strict JSON according to the requested schema block.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Le(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Pe{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_object"},d.messages.length>0&&"system"===d.messages[0].role&&(d.messages[0].content+=`\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(u,null,2)}`));const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u)try{const e=f.replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g,"$2").replace(/^```(json)?|```$/gm,"").trim();m=JSON.parse(e)}catch(e){console.error("Failed to parse structured JSON from GPT",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver.\nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new I(e,r,s,n):422===e?new O(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class I extends b{}class O extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Ie,Oe;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Ie.set(this,void 0),f(this,Ie,e)}_thenUnwrap(e){return new Le(m(this,Ie,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Ie,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Ie=new WeakMap;class Pe{constructor(e,t,s,n){Oe.set(this,void 0),f(this,Oe,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Oe,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Oe=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,It,Ot,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",It).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",Ot).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",It).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",Ot).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Is extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Os=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Is(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Is;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class In extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class On extends ze{constructor(){super(...arguments),this.clientSecrets=new In(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;On.ClientSecrets=In;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Os("OPENAI_BASE_URL"),apiKey:t=Os("OPENAI_API_KEY"),organization:s=Os("OPENAI_ORG_ID")??null,project:n=Os("OPENAI_PROJECT_ID")??null,webhookSecret:r=Os("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new On(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Os("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=I,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=O,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=On,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_schema",json_schema:u});const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u&&f)try{m=JSON.parse(f)}catch(e){console.error("Failed to parse structured JSON response",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index c8faebd..69b67ea 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","temperature","top_p","fixeO","structuredResponse","cleanedResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","json_schema","temperature","top_p","fixeO","structuredResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/src/background/core/get-content-with-history.ts b/src/background/core/get-content-with-history.ts index 478a2a4..dbcb9fe 100644 --- a/src/background/core/get-content-with-history.ts +++ b/src/background/core/get-content-with-history.ts @@ -14,12 +14,11 @@ type History = { }; const INSTRUCTION = ` -You are an expert quiz solver. +You are an expert quiz solver. Please solve the provided question based on its type and provide the correct result. - For choice questions, output the exact index(es) of the correct answer(s). - For text/numerical questions, provide the exact wording or number. - For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied. -Always output strict JSON according to the requested schema block. `.trim(); const SYSTEM_INSTRUCTION_MESSAGE = { diff --git a/src/background/core/get-response.ts b/src/background/core/get-response.ts index ff9b58a..b8cf123 100644 --- a/src/background/core/get-response.ts +++ b/src/background/core/get-response.ts @@ -21,7 +21,8 @@ async function getChatGPTResponse( const timeoutControler = setTimeout(() => controller.abort(), (config.timeoutValue || 20) * 1000); // Get the content to send to chatgpt - // Including the instructions to the AI, the images as base64 if needed, the question and the past conversation if history is set to true + // Including the instructions to the AI, the images as base64 if needed, + // the question and the past conversation if history is set to true const contentHandler = await getContentWithHistory(config, questionElement, question); const client = new OpenAI({ @@ -40,17 +41,16 @@ async function getChatGPTResponse( const requestPayload: any = { model: config.model, messages: contentHandler.messages.map(msg => ({ ...msg })), - max_completion_tokens: config.maxTokens || 2000 // Maximum length of the response, + max_completion_tokens: config.maxTokens || 2000 }; + // Use the modern json_schema structured output when a schema is available. + // The model is guaranteed to return schema-valid JSON — no prompt hacks needed. if (targetSchema) { requestPayload.response_format = { - type: 'json_object' + type: 'json_schema', + json_schema: targetSchema }; - - if (requestPayload.messages.length > 0 && requestPayload.messages[0].role === 'system') { - requestPayload.messages[0].content += `\n\nYou MUST respond in JSON strictly adhering to the following schema. Do NOT wrap the JSON in markdown code blocks. Output raw JSON only.\n\n${JSON.stringify(targetSchema, null, 2)}`; - } } const req = await client.chat.completions.create(fixeO(config.model, requestPayload), { @@ -60,17 +60,13 @@ async function getChatGPTResponse( clearTimeout(timeoutControler); const rawResponse = req.choices[0].message.content ?? ''; - let structuredResponse: MoodleQuestionResponse | null = null; - if (targetSchema) { + let structuredResponse: MoodleQuestionResponse | null = null; + if (targetSchema && rawResponse) { try { - const cleanedResponse = rawResponse - .replace(/^```(json)?[\s\S]*?\n([\s\S]*?)```$/g, '$2') - .replace(/^```(json)?|```$/gm, '') - .trim(); - structuredResponse = JSON.parse(cleanedResponse); + structuredResponse = JSON.parse(rawResponse); } catch (e) { - console.error('Failed to parse structured JSON from GPT', e); + console.error('Failed to parse structured JSON response', e); } } From 46c5b756a53ec300fe5e0fbe59a3e4d9ea62b224 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Sat, 25 Apr 2026 20:11:02 +0200 Subject: [PATCH 08/12] feat(popup): validate model using structured JSON output Replace the fire-and-forget model ping with a structured output test that enforces a JSON schema (reply, success, data.number). The parsed response is validated against the expected types before showing a success message, providing stronger proof that the selected model both responds and supports structured outputs. --- extension/popup/popup.js | 2 +- extension/popup/popup.js.map | 2 +- src/popup/gpt-version.ts | 54 +++++++++++++++++++++++++++++++++--- 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/extension/popup/popup.js b/extension/popup/popup.js index 0a580be..e4a1f55 100644 --- a/extension/popup/popup.js +++ b/extension/popup/popup.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{l(n.next(e))}catch(e){o(e)}}function a(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}l((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const l=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class c extends Error{}class u extends c{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:l(t)});const r=t?.error;return 400===e?new p(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class f extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class p extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends c{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends c{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,l,c,u,h,d,f,p,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof c?w=c(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return l&&!m?l(t,G.encoder,g,"key",f):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(l){const e=m?t:l(t,G.encoder,g,"key",f);return[p?.(e)+"="+p?.(l(w,G.encoder,g,"value",f))]}return[p?.(t)+"="+p?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&l&&(w=K(w,l)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(c))$=c;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:l,c,u,h,d,f,p,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],l="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const c=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=ce,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(ce))}`)};function he(){}function de(e,t,s){return!t||ce[e]>ce[s]?he:t[e].bind(t)}const fe={error:he,warn:he,info:he,debug:he};let pe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return fe;const n=pe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return pe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new c("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new c("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=le(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new c("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new c("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let l=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(l=a+"",r.push({start:t.length+o.length,length:l.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":l)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let l;for(;null!==(l=a.exec(i));)r.push({start:l.index,length:l[0].length,error:`Value "${l[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new c(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new c(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,lt,ct,ut,ht,dt,ft,pt,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),lt.set(this,(()=>{})),ct.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),ft.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,lt,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",pt).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,ct,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,ct,"f")[e]||(o(this,ct,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,ft,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,ft,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,ct,"f")[e];if(s&&(o(this,ct,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,ft,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,lt,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,lt=new WeakMap,ct=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,ft=new WeakMap,st=new WeakSet,pt=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof c)return this._emit("error",e);if(e instanceof Error){const t=new c(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new c(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new c("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,l="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new c("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const f="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(l&&l!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(l)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await i.function(a,this),u=o(this,mt,"m",xt).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:u}),l)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new c("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new c("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?l():"["===e[n]?c():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},c=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new c("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,l={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new c(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:l,...u}=t,h=t.role;if(!h)throw new c(`missing role for choice ${n}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new c(`missing function_call.arguments for choice ${n}`);if(!l)throw new c(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:l},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return l?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:l.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:l,name:u,...h}=r||{};if(null==i)throw new c(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new c(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new c(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==l)throw new c(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:l}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:l,...c}=e;a?Object.assign(a,c):a=r(this,Ht,{...c,choices:[]});for(const{delta:r,finish_reason:l,index:c,logprobs:u=null,...h}of e.choices){let e=a.choices[c];if(e||(e=a.choices[c]={finish_reason:l,index:c,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(l&&(e.finish_reason=l,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===l)throw new x;if("content_filter"===l)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:f,function_call:p,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),f&&(e.message.refusal=(e.message.refusal||"")+f),m&&(e.message.role=m),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const l=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(l,a),s&&(l.id=s),n&&(l.type=n),r&&(l.function??(l.function={name:r.name??"",arguments:""})),r?.name&&(l.function.name=r.name),r?.arguments&&(l.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),l)&&(l.function.parsed_arguments=Bt(l.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new c(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new c(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class ls extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class cs extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new cs(this._client),this.translations=new us(this._client),this.speech=new ls(this._client)}}hs.Transcriptions=cs,hs.Translations=us,hs.Speech=ls;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class fs extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ps extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new ps(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=ps,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new fs(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=fs,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new f({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class ln extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let cn=class extends We{constructor(){super(...arguments),this.permissions=new ln(this._client)}};cn.Permissions=ln;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new cn(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=cn,dn.Alpha=an;class fn extends We{}class pn extends We{constructor(){super(...arguments),this.graderModels=new fn(this._client)}}pn.GraderModels=fn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new c(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new c(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new c("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new c("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new c(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new c(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new c(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new c(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new c(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new c("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),l=[...s];const c=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);l.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(c),await this.createAndPoll(e,{file_ids:l})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),l=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),c=parseInt(a,10);if(isNaN(c))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-c>n)throw new $("Webhook timestamp is too old");if(c>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),f=l?`${l}.${a}.${e}`:`${a}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(f)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new pn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new c("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new c("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const l="warn";this.logLevel=l,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??l,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof c)throw e;throw new c(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new c(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:c}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),p=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,c,g).catch(l),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new f;throw new d({cause:y})}const _=`[${u}${p}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>l(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),l=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,c={signal:n.signal,...l?{duplex:"half"}:{},method:"GET",...i};o&&(c.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,c)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new c(`${e} must be an integer`);if(t<0)throw new c(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:l,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:l,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=c,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=f,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=p,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=pn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n;const r=null===(e=Yn.value)||void 0===e?void 0:e.trim(),o=null===(t=Qn.value)||void 0===t?void 0:t.trim(),i=null===(s=tr.value)||void 0===s?void 0:s.trim(),a=null===(n=sr.value)||void 0===n?void 0:n.trim(),l=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:o,baseURL:i,project:a,dangerouslyAllowBrowser:!0});yield e.chat.completions.create({model:r,messages:[{role:"user",content:"reply just pong"}],max_completion_tokens:l||2e3}),Gn({msg:"The model is valid!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const lr="1.1.5",cr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(cr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,cr.appendChild(s),cr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),lr))),t=e.split("."),s=lr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(lr)}ur(lr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),fr=document.querySelector("#switch-settings");fr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",fr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",fr.textContent="Go back to settings")}));const pr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];pr.addEventListener("click",(function(){const[s,n,r,o,i,a,l]=mr.map((e=>document.querySelector("#"+e).value.trim())),[c,u,h,d,f,p,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:l?parseInt(l):void 0,logs:c,title:u,cursor:h,typing:d,mouseover:f,infinite:p,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="1.1.5",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); //# sourceMappingURL=popup.js.map diff --git a/extension/popup/popup.js.map b/extension/popup/popup.js.map index cfff472..66577fd 100644 --- a/extension/popup/popup.js.map +++ b/extension/popup/popup.js.map @@ -1 +1 @@ -{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","max_completion_tokens","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file +{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","_f","_e","max_completion_tokens","json_schema","schema","properties","reply","success","number","required","additionalProperties","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file diff --git a/src/popup/gpt-version.ts b/src/popup/gpt-version.ts index 086eb16..16dd610 100644 --- a/src/popup/gpt-version.ts +++ b/src/popup/gpt-version.ts @@ -81,12 +81,58 @@ export async function checkModel() { project: projectId, dangerouslyAllowBrowser: true }); - await client.chat.completions.create({ + const completion = await client.chat.completions.create({ model, - messages: [{ role: 'user', content: 'reply just pong' }], - max_completion_tokens: maxTokens || 2000 + messages: [ + { + role: 'user', + content: + 'reply just pong, set success to true, and provide a random number between 1 and 100.' + } + ], + max_completion_tokens: maxTokens || 2000, + response_format: { + type: 'json_schema', + json_schema: { + name: 'model_test', + strict: true, + schema: { + type: 'object', + properties: { + reply: { type: 'string', description: 'The text reply' }, + success: { type: 'boolean', description: 'Always true' }, + data: { + type: 'object', + properties: { + number: { type: 'integer' } + }, + required: ['number'], + additionalProperties: false + } + }, + required: ['reply', 'success', 'data'], + additionalProperties: false + } + } + } }); - showMessage({ msg: 'The model is valid!' }); + + const content = completion.choices[0]?.message?.content; + if (!content) { + throw new Error('No content returned from the model.'); + } + + const parsed = JSON.parse(content); + if ( + typeof parsed.reply !== 'string' || + typeof parsed.success !== 'boolean' || + typeof parsed.data !== 'object' || + typeof parsed.data.number !== 'number' + ) { + throw new Error('Model did not follow the JSON schema correctly.'); + } + + showMessage({ msg: 'The model is valid and supports structured outputs!' }); } catch (err: any) { showMessage({ msg: err, isError: true }); } From 03bc4e64e4b49a681290b416b345f9d9de6d2e5c Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Tue, 28 Apr 2026 19:53:39 +0200 Subject: [PATCH 09/12] refactor: update clipboard mode for JSON and remove question-to-answer mode --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- extension/popup/index.html | 3 -- extension/popup/popup.js | 2 +- extension/popup/popup.js.map | 2 +- .../core/modes/question-to-answer.ts | 32 ------------------- src/background/core/questions/clipboard.ts | 3 +- src/background/core/reply.ts | 8 ----- src/background/types/config.ts | 2 +- src/popup/mode-handler.ts | 3 +- 10 files changed, 8 insertions(+), 51 deletions(-) delete mode 100644 src/background/core/modes/question-to-answer.ts diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index 6f04a24..0afcbe1 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver.\nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new I(e,r,s,n):422===e?new O(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class I extends b{}class O extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(Deno.build.os),"X-Stainless-Arch":H(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":F(globalThis.process.platform??"unknown"),"X-Stainless-Arch":H(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const H=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",F=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Ie,Oe;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Ie.set(this,void 0),f(this,Ie,e)}_thenUnwrap(e){return new Le(m(this,Ie,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Ie,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Ie=new WeakMap;class Pe{constructor(e,t,s,n){Oe.set(this,void 0),f(this,Oe,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Oe,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Oe=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const He=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Fe=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(He(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!He(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,It,Ot,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",It).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",Ot).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",It).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",Ot).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ht=32,Ft=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ht&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ht&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",Fe({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",Fe({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Is extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Os=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Hs,Fs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Hs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Hs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Fs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Hs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Fs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Fs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Fs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Hs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Hs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Is(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Is;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,Fe({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",Fe({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Fe({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class In extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class On extends ze{constructor(){super(...arguments),this.clientSecrets=new In(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;On.ClientSecrets=In;class Hn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Hn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Fn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Fn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Hn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Fn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,Fe({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Os("OPENAI_BASE_URL"),apiKey:t=Os("OPENAI_API_KEY"),organization:s=Os("OPENAI_ORG_ID")??null,project:n=Os("OPENAI_PROJECT_ID")??null,webhookSecret:r=Os("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new On(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Os("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=I,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=O,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=On,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard"),navigator.clipboard.writeText(s.response)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_schema",json_schema:u});const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u&&f)try{m=JSON.parse(f)}catch(e){console.error("Failed to parse structured JSON response",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"question-to-answer":!function(e){var t;const s=e.questionElement;e.removeListener();const n=null!==(t=s.innerHTML)&&void 0!==t?t:"";s.innerHTML=e.gptAnswer.response,s.style.whiteSpace="pre-wrap",s.addEventListener("click",(function(){const t=s.innerHTML===e.gptAnswer.response;s.style.whiteSpace=t?"initial":"pre-wrap",s.innerHTML=t?n:e.gptAnswer.response}))}({gptAnswer:a,questionElement:e.questionElement,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver.\nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class P extends Error{constructor(e){super(e)}}const L=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(Deno.build.os),"X-Stainless-Arch":F(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(globalThis.process.platform??"unknown"),"X-Stainless-Arch":F(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const F=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",H=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Pe extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Pe(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Le{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Pe{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Fe=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],He=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(Fe(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Fe(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Pt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Lt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Lt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Pt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ft=32,Ht=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ft&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ft&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",He({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",He({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ps,Ls,Ns,js,Ms,Ds,Ws,Bs,Us,Fs,Hs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ps.set(this,{}),Ls.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ps=new WeakMap,Ls=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Hs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ls,"f")}currentRunStepSnapshot(){return m(this,Fs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ps,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Hs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Hs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ls,"f"));f(this,Ls,t),m(this,Ps,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ls,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ls,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ls,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ls,"f"))}}m(this,Ls,"f")&&this._emit("messageDone",e.data),f(this,Ls,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Fs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Fs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,He({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",He({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",He({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Pn(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Pn(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Ln,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Fn extends Tt{constructor(e){super(),Ln.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Fn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Ln,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Ln,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Ln,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Ln=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Ln,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Hn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Hn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Pn(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Pn(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Fn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Hn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,He({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new P("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new P("Webhook timestamp is too old");if(c>l+n)throw new P("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new P("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>L.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Pe(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=P,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard");const n=s.rawResponse||JSON.stringify(s.response)||"";navigator.clipboard.writeText(n)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_schema",json_schema:u});const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u&&f)try{m=JSON.parse(f)}catch(e){console.error("Failed to parse structured JSON response",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index 69b67ea..01fffe3 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/question-to-answer.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","rawResponse","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","json_schema","temperature","top_p","fixeO","structuredResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","questionBackup","innerHTML","whiteSpace","contentIsResponse","questionToAnswerMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","textToCopy","rawResponse","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","json_schema","temperature","top_p","fixeO","structuredResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/extension/popup/index.html b/extension/popup/index.html index 9ee617d..d3ba55d 100644 --- a/extension/popup/index.html +++ b/extension/popup/index.html @@ -89,9 +89,6 @@
  • -
  • - -
  • diff --git a/extension/popup/popup.js b/extension/popup/popup.js index e4a1f55..fd4bc70 100644 --- a/extension/popup/popup.js +++ b/extension/popup/popup.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"],"question-to-answer":["typing","infinite","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="1.1.5",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="1.1.5",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); //# sourceMappingURL=popup.js.map diff --git a/extension/popup/popup.js.map b/extension/popup/popup.js.map index 66577fd..8eaecf2 100644 --- a/extension/popup/popup.js.map +++ b/extension/popup/popup.js.map @@ -1 +1 @@ -{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","_f","_e","max_completion_tokens","json_schema","schema","properties","reply","success","number","required","additionalProperties","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file +{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","_f","_e","max_completion_tokens","json_schema","schema","properties","reply","success","number","required","additionalProperties","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file diff --git a/src/background/core/modes/question-to-answer.ts b/src/background/core/modes/question-to-answer.ts deleted file mode 100644 index 7f32890..0000000 --- a/src/background/core/modes/question-to-answer.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type GPTAnswer from '../../types/gpt-answer'; - -type Props = { - questionElement: HTMLElement; - gptAnswer: GPTAnswer; - removeListener: () => void; -}; - -/** - * Question to answer mode: - * Simply turn the question into the answer by clicking on it - * @param props - */ -function questionToAnswerMode(props: Props) { - const questionElement = props.questionElement; - - props.removeListener(); - - const questionBackup = questionElement.innerHTML ?? ''; - questionElement.innerHTML = props.gptAnswer.response; - questionElement.style.whiteSpace = 'pre-wrap'; - - // To go back to the question / answer - questionElement.addEventListener('click', function () { - const contentIsResponse = questionElement.innerHTML === props.gptAnswer.response; - - questionElement.style.whiteSpace = contentIsResponse ? 'initial' : 'pre-wrap'; - questionElement.innerHTML = contentIsResponse ? questionBackup : props.gptAnswer.response; - }); -} - -export default questionToAnswerMode; diff --git a/src/background/core/questions/clipboard.ts b/src/background/core/questions/clipboard.ts index c943b0b..0357915 100644 --- a/src/background/core/questions/clipboard.ts +++ b/src/background/core/questions/clipboard.ts @@ -9,7 +9,8 @@ import titleIndications from 'background/utils/title-indications'; */ function handleClipboard(config: Config, gptAnswer: GPTAnswer) { if (config.title) titleIndications('Copied to clipboard'); - navigator.clipboard.writeText(gptAnswer.response); + const textToCopy = gptAnswer.rawResponse || JSON.stringify(gptAnswer.response) || ''; + navigator.clipboard.writeText(textToCopy); } export default handleClipboard; diff --git a/src/background/core/reply.ts b/src/background/core/reply.ts index 41e1ae0..1a43134 100644 --- a/src/background/core/reply.ts +++ b/src/background/core/reply.ts @@ -3,7 +3,6 @@ import Logs from 'background/utils/logs'; import getChatGPTResponse from './get-response'; import createAndNormalizeQuestion from './create-question'; import clipboardMode from './modes/clipboard'; -import questionToAnswerMode from './modes/question-to-answer'; import autoCompleteMode from './modes/autocomplete'; type Props = { @@ -56,13 +55,6 @@ async function reply(props: Props): Promise { removeListener: props.removeListener }); break; - case 'question-to-answer': - questionToAnswerMode({ - gptAnswer, - questionElement: props.questionElement, - removeListener: props.removeListener - }); - break; case 'autocomplete': autoCompleteMode({ config: props.config, diff --git a/src/background/types/config.ts b/src/background/types/config.ts index cef27b4..558452e 100644 --- a/src/background/types/config.ts +++ b/src/background/types/config.ts @@ -11,7 +11,7 @@ type Config = { timeout?: boolean; history?: boolean; includeImages?: boolean; - mode?: 'autocomplete' | 'question-to-answer' | 'clipboard'; + mode?: 'autocomplete' | 'clipboard'; baseURL?: string; projectId?: string; maxTokens?: number; diff --git a/src/popup/mode-handler.ts b/src/popup/mode-handler.ts index 4a15450..25c0805 100644 --- a/src/popup/mode-handler.ts +++ b/src/popup/mode-handler.ts @@ -6,8 +6,7 @@ const toExcludes = ['includeImages']; // inputs id that need to be disabled for a specific mode const disabledForThisMode: Record = { autocomplete: [], - clipboard: ['typing', 'mouseover'], - 'question-to-answer': ['typing', 'infinite', 'mouseover'] + clipboard: ['typing', 'mouseover'] }; /** From e7f00359a1444dceed4dd4bf7b23dd967ee1d9f3 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Thu, 30 Apr 2026 22:04:30 +0200 Subject: [PATCH 10/12] Rebrand to SparkAssist and update version to 2.0.0 --- README.md | 4 +- extension/icon.png | Bin 30204 -> 491373 bytes extension/manifest.json | 8 +- extension/popup/index.html | 211 ++++++++++--------- extension/popup/popup.js | 2 +- extension/popup/style.css | 412 ++++++++++++++++++++++++------------- package-lock.json | 8 +- package.json | 6 +- src/popup/version.ts | 2 +- 9 files changed, 383 insertions(+), 270 deletions(-) diff --git a/README.md b/README.md index 40215d3..5df9ba9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ href="https://www.flaticon.com/free-icons/mortarboard" target="_blank" rel="noopener noreferrer" title="Mortarboard icons created by itim2101 - Flaticon" >Mortarboard icons created by itim2101 - Flaticon

    -# MoodleGPT 1.1.5 +# SparkAssist 2.0.0 This extension allows you to hide CHAT-GPT in a Moodle quiz. You just need to click on the question you want to solve, and CHAT-GPT will automatically provide the answer. However, one needs to be careful because as we know, CHAT-GPT can make errors especially in calculations. @@ -12,7 +12,7 @@ Find the extension on the Chrome Webstore right [here](https://chrome.google.com ## Summary -- [MoodleGPT 1.1.5](#moodlegpt-115) +- [SparkAssist 2.0.0](#sparkassist-200) - [Chrome Webstore](#chrome-webstore) - [Summary](#summary) - [Disclaimer !](#disclaimer-) diff --git a/extension/icon.png b/extension/icon.png index 9402a784f38cd38e94948e1f708d00e71b4fab42..53f75ade8f14b8f7d548448d643a4f47c5bdd18f 100644 GIT binary patch literal 491373 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 vwj*G0WrlaLG0aDH(GHwzV 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%0A}dLpHDnI_>U4Y7LL_f-*__`_tZ-6A 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�cC{%YIqAm#Hq|Q7_QG_S}@9MiLLx z#j~}rJ!h|S<=0VtsQ2ikx)xgq?|RNF_w<=hPfk_z{JK>Nq3DYL(P)lHG5B5Mh4B@z zyxl&x3kIv~1oqCx)wi)TIYO;yMOusoibNL>9)(O9Qx`v-sZsPM-N(;EHhjm?ee21K z(wwF#87H0qVt{QF_Tw_YOw*Z5P?*l8HyyttTh=VQ$6^E@8X^pTJW6}?=uzQh)p9Vu zvxj+?6BU_N^{^aAYxV67Ss|%M2|Jx?i4EOdWuL@el zJGN^`-b~kK=dD4 zkdkxtir`ml{)@3-|DOJn+BR#;Gaj)|$K|d(ePx2m7cmZQ@H$Juba`{ht32WFUGvR~ zf0%A3!S%dGz8sxngKF(wpzLi)h-2gif>Dg2`1?nt zo0`NS=FQ_=lLf?7Q@jZ_pF10s<*f<76S_#C+oV?1dTs2ROdXK=#-&Uc^nvziQ0ut5q%**8T3w{Yo5c5Gdo7ILRnIW~tfDKs- z@tTB8_`nVjNFRE2!2qV7%<}9T!n5&{zrb?~NX;m)mJzf%tgXb~Ys{1bY>)RF*Z>J2 z>B5yLk$M}KCRHlHrcs7L=XPUl<8JtQq`n8qyYrp|sV{lZ`!tqIxU|P5h%faq^_fY* z5T-*#wpCMu;niGHL(-#XDVp&f)&+h}9UoE*PNzS4uQ$wncO;5le0R5+^y@+?0KCie z@6c~B_Y0qx%iu;}L|CneXLLMlY^lAx$hCag@ijH}w{utMX1XC|**}*ucGZRuB;0(W zPgMAo4%bu^@p@Y!_N`8p_rD#g3MS8y=9a&j)zTN>iRxIFh}w&ieiGBY{X)*exx}cV zU85qA&imRl^J=RGEg6{q%SS8b!p!Hv-I6LVW)zei1gX2yuoiW7(vJ_>+JNPcXlhhHsAleowGY4|k*vACuEwS>${uxDxqF z93`veV88>2b41R7f9H^~4^p=DZ(did+n%}a$Hp>=)74#4cu=JzA2#_~bkT3fa4v%I z8L|gG;n?zg9Bqq!a)Y#;6Tq#|F&gJbRg>ENu8eWJKcOP|)06=7v$bqU%l&s6}O}Z1p8F}eH&`5Zp zurv@T7V1FzKtVkMhL)g(7Wi$stAl|UvG@vZGtVN!5kK2pdf0#>BhT$zPncke=jJ@3 zAxIor?;x+SC-zGCBN&~tD?m!MJukZ?dLl=z9`3kvXem(an7K@|`N&B;74u8pKl7U1 zE!hO=KUtPzkJf;K!>_3H@(R;KpcZk6=Bm`?3RTZ>u@?4>E-9NwKrojbPsJ6f3~b$L zIsLvQBT>1qKvLT>$5zKPoCVc!KlJ88s`ETPA>bTR+V<&tiFf}d+!$hE>YfpmK%?4D z*VkUw_=6@wfrZ?4>}ACs$6|TM$L_6;FL8NSjYtjP8eAdZ70~h`%iGS!z z5E6ovntd&dJd3(s_dVvs$CH7+I4-WyJ%M%!(A+B!3pDILUl?6l${r<2=5Qk`=WPt8mz|r+DB~xDv29m0}zaZAFEI;uVs6Kj!F5pQ*l`a|wu^6o%6k z`*G|6`!=nsl{l=gQahz&Gu3nTO_GPl#|e%v{x3`Q-%ayF$PqcdcC*0v0KiWiO!ZaW zU5i)~>b0*@^xha1^?SjU=)j=xmya`_AIG=;;oJL^!ecL%_wPV+gS5Xs&8vTIXw~^- zjnB`OS7grb)h9WgYE#al(Vv#vlBnaB&r_C@Sw77x2!ub0?!Ke)f*8GO5k0a%5}!0O z#0r59;!UrU^l;A;kKtSnT#;ZY z!YKE#s+2!vG+(gBUC(c=lQ-cDN~v-18$l)4*7#la!0?`lG5pRe!=z4nh=oLIq@{{D z15idFbHh&mIzBSuC!yOg?uAQQL%wkn)X(E2Z+@wS6AQCEdI~Y^f@Ap+BO4;JnhB(a z9_JJmPc3RH8guq|)|99Qc_uu{EPq~&7HSu9s3?x}jw;*?O??rySMY zD@?$=AvxUW`jcFpAG;v4kSOS;c_$s}@9vXWZ=_&pyV7)VV_5(F{nN@=v9G?pg4LP> zVyyS>J*b8zSUlvc{{HZD&WXL*uDrkTB<|#~u_NocsP?RDL*u7r>IHs`K8wk`YT)M) zWcf%!?M8{+D&b21ww+U68bjWI3Xg3UM|B_Ru~sVTEIje-6O#~4nR>R{JJ^G|H&EgJ zK{QTt+)SZJTRVqh)s6ojFd9>Jz@0Xg8K2Gle;r_k}yg(J-z#s9RW~nS42FF2UvQUGV!Q+Gyq+ zLfs{8=XAQm^S4EYq+AUTunFKY?0#~6YLRSdD4BPQrn;|8GpBSt(5N_$r_FZDt2A9N zSkM)k&QXMxd>w04yz2J$9D~wKv774d5^;aZp*?+J?Sua5tGy7TxDQvO6E8fm5PK*8 z_9LsOY0N`55Z_-n#I*ZFOiMPF^+sT z6+v54DYf`(S6~KYXdvMJ-oqjG%6iyWf;o@KlOi!8iYtP0@PD))q}Xht$j)zO4tdv? z!i=AVzl|8#Oxq#k<)uafB`tOO$;W}r7VbZp@P1~2verO>TePaJ8W)H)qDBP6zY^vX z)bq0Z`=KGk-@B`=Z3*un5C5>HQC#F47UJp}qSXR~UuEo5L=(O$=-s|&Pp#%Neb4dq zcKej>;PYIR9lw}aQ~yvy5At`Gy7gFHHnnO%`Z07X00<< zl~u8yFZXY9f8dkXX`P;jZ%jVj8JL4?fFut)OZ#yFi3OiU(!zO`Uj(U5$!j4^^Ijo) zVOkWAV?Vlz-a`sYj35zhrz=}dT7V20WA0xInpnko?$N&52R(OYe5W7(fb+x@ zAO30^PpFJFtKEm!pC2L77zNX^E z7i%g=K}00@5-IqiQ^0ANWjs?oL0Hs68s&jF!gN7y?cyhFh> zxtl3UVqVYGQe?ZbiWk_XqBT>(3lqM{GW2gAS3gq(F^3XThft(VQYH6y`jHh^QXhzu zoh3=f5tif6=pcT2;KIn}lg3-W2YugD+i%XN-D|Zoi@p6n~yxG_q^rMNFPU^yXG=S0+$N#3(@^{ z@m`3HiqB7Kr!UM=ODEok%&g}e#Hxel~9%)u(7@qvrCuIOC#hu};vaG8dTb;x_$}~}) z{=31x2$=o}4Ek;n7Ofx0xM!;~abTp?ZGQ>$A80`4KMU;)4sTn_u!HLKvIWT+^{FrSR`m<3(he!kO}EK2|3tNkE(vRVJRo(HnX^tlnF&;vh1tvLV=O zIr_DrZN&Th#M-7+nz3fD%zNCB*azOFI5m=;b>H3X+} z`cA5^_=N1>3Bq5}s?`>wCRbNS&d+Kk`6!{KXHz@E1s){-3wh~;f{+uEU@mxmoyC#$ zxh>8lo$njIdDcfH>{es)OPAMG4F6F_jPbfxa_LgrSw3QSVD>v5s#FeIt>Z@(i@0k< z>T6#-Ou^w`=UD&?CR~TBklKrVVD*vK2Ct#uJ^@upE0>H$t~bXG8E3!3>D8uOepeWM zSp0~6SeG}o=6tnilE)x-e6!hSSL)XoxRb)4}Ipknh*~0-EdUKB!oV=4XjuP#}N2)!O!ycBq$;d z@av!C5}>dXxN1MxuSM_!%PV(2tJTrXLJSf|G)o`mOq==$1FZqy*xxUYxK5$l1C{z1LCHZ?{{A z*&N~oMfP_0f;?1hzmL3S)7*xpt{zL)=aH9|4g*k1Oz__J`fAZ`+wZIyy~Oeqq@Y9o ziq6v5OX1w6T@u9gYO8s~o0%40nlCO4K@3EVHAw?mK=c@9-jk5BDZFb~h=(hJCCDgs zataPn>fC@Bi&|d|(3@CmSLgtY4e;9Uy2;XKh)c>q&j*{`@x-L5{YX zV5h(g3rW81@f+z7#k!LWi;fx!+eu=M&V@^jcr#SK;tN+)5pG$p?t9Aw)GY}rXUwbq zoExh8A$u5b`7IvARr@;BY9Y6&tzHhsrrQnX-`|eV0z(cqks2G`uqKbm7W(REfXy3V zv?+l~!Tb^*RDr}>N|p$5>bHKQ&#u-YC@E7mJYf>^9MlCvkl>f<}* zJVJ`tL=I`W(bwp$3t_TNwjQ1s%-m+{{squ8-&x95GOBbvYu_>EUfrki0~WL7h^ep? z5sENPqE#9vF7a6c!!L9Uq=2@7$6B)I;f$zS--Poe`UDAqns{|G_%n&2WVlMK_a-t$ z>TlZsF=z+qVwi598Y}7V+?=qY?`&R4z6S3|LWsZG)_bMHz2(&3K0ZjuftLD4@A_WX z$o4Cc7;s)3hpFus0~hMGQWiB+_|jO5b|-C3eFojU3uvV3L(Ta0?wl`~-IYe;W{|0p!mscJCO~e))BQmcD47laG%= z2b5_i?5_F&c?gq7^6OxT$(UjVbKdm6)f5hr8fg}~-^VBeJIJd`Y^K2P;_u?I!moEy z2abUFxmL%qh*^g`)LvU3U8g--f?VPK~nSS zm{5sACu-Hop2*IzUw960MBMrT^|$LG5V0q+8V4|*Oo;I#bQ1u&o7ygcXCoN@fga>= z9dBy{^>&Xr&-abIN0eCufVB&PkVihWDx?IhGZ9Qww=X%5_Z+HI4a35`W0_|PIO~|< zKgcUJ)01P<8!mapiA+QA-fTVT;BX&$RW#fM3_3A|E_B9XBua5gBct!Q1^U70Abye% zbx4zw+d;RiY!Zq0?W6B8|3}f4$20x^aZ*u=(19?8gxut|uav7;j#93XB$oSVt}RrG zxkHJm5OOSXUvtk9!?4`PWNveenQi?(zsJL$cx<1~>-~Pc->>JDgR$&?qeB#0iB9xy z3>MWd$lCw9u?x)heoQ&&&m5N?zdUqSbSV=T~&aj5m{5SqKoO@5Ybv z6dSY%zX7N%G_t3syR}PmF#u{~f5HB)kD(W@sIP7n9SIpcjU;~0Asj}^$a1nVBeYQ| zn&3|)JfhNnT{aD~C;*Hm6As1Mi34ry(F4XbSLzz0c!(vTEU*Hi_8ukD zL`y?z!>OwloO@I-VP_snUcuf0ilizUV8O;*O%1K~=hXF^t&U*B=|*X-b$Ku6CzR&% z8@LudBC!Qs@=ay(>iMBh*alAdhja@96nO2>U`cn*iPDwpwhxE@kfkjvT12+@KQ`fk z6-Zl%_xbD7JL4GCv{em|C3Gf;i0VVw-<>hs5J_(U0(2E{ye|Umtkx%`CArEqP3x>` zrQ!vTlZly|XI}H1L=;fx5U&C@96*UZ!ahp@ zx|m=iWjx^(Z-E#iA~f@kNOIK4kPSQy9W5yqLK5%QUIZADq3((8+qeStE9|zMsRRkk z3ZZc0Fo?Tq*nFCGm%O$!f{dM+MH6cd!=rApr~ZAhEkNJ%mAvNIr>4vA<1V)zarCR@!rlf?BmDJQhHqD+1-bH_p`grIc+oIz4)Se@+nsDF@_+aHvka*a3r`1FI&@I?u@T6Dc8?R>jy-=t(z6$^1 zS z%ZKL7#wo%#n7T!GrwA@J=5~mS`X43f!w@sogJi%W0ihd=dA!9!4uFd`X1l}hG#rH< zc|-7=gUDP1oTzbl(Bhs@4~F^&!n*9#bjgvP)9S+z!QdI^HQHPJA?pMRhT=mr12RW* z>O-$dfw^a1Vy=Lcc26oFK-p*?8Ff+{EnF$~795tjBB_T`egM4PI zRlQTFG|k)o_QT$!T)8RKOZ+`QG#6)zCf<&(B1?+ij}KXIITq zo|Uij!_tH0bai{R?J2jseCt=`725zahC_u`0 zWdli0`lW@il;`y)KJ%T-cJ(V+tw$FHi^o50Y--31`y`2!PhllHu{k#<3G$rm-hDCr z_?bcblndmY>L1HE_!M3tH*HA}yv{g#yH1H(eqlTC!oAyvP1#&yAFi(YtJS8)xOCia zaaprjY@gruY`$W&8dTK9Bm3b-N#0+{#hLVmhr!rUY)uB^yzzb{0P04C8$t!btwt}m z=kPGVVF8NmK2gnL&GpD*w9^An70s>uSOfNLNW8b#BU}l5(zfO(f^b*9EDiSU`4i%u z=y{V@D6-FQeFtS-{*XD>ti2w*x8}8Al#HO{nP5%Mgg1y4O}bw+Ar@8Ru>DF)*I$!# z+?nSjk8%PUTTIE}q|CA}YKjTZ-^<}lS*-IC9BOm^8Tdff4;7SVmqJ^!1^jHP$}eQC zJuK210e(Jw-uL~Zs{oC8dzstp{B`TN`vu281e?~`_4ibMCVpzNz3XIp$y@Nu?y@$z z0OPL`8X>#rh2rPp;5g2QLj-hjIcd8`CwwDDg^QBF@0}C|b=fK8w&ttbvkAJ^g?GNg zVQo$V!#?Wxb1=Ktli6PDYJFVfy3bENcc<>%x1X>#mhYeXIoT=MPM-swT?n$ZKGZzR z4%7kom;GaVz#@(~7!*EY_0Mn;#pJJbWT)UbI~CvA$@e;}63uufvD`HN9fEn(?VU|s zXsN-CeYry{3TlEp6VBT!29Ey)bob{Yd4JO>o6w$Ee1Mi*UZL~U{QC0%g~uf2)b@Fg zo+|CtyxdFk?pem^i4HZREg1MGR~2%p1LxD@R{&<~p7d}m2y+62ySJ69?r zvC&?P&H5TDhu6h+S|t5oFsYw;jd7U*0wlM~!tSpSf;8235O4U|`HdSB%T9chXYUK( zFM${{ZZ)=2bXvas#DuX#iqpbe2l0~1ue*L~6{^bn$aWO#;{Z}03|w7B!`_^V~Nlpe6V~AuQ=EzcRN^ z7JltgQSH^kD7{reqD5$;``Dlv{*JV3n?4t70DK($47df^!!OU-wqcGjZcy@nqOv7g z(V~PvldWs-&E%Jg{M?T@!Gz;5^bN?v+NKc&!3^}0u~fngR`_OVA$!8Ld#<{yg)7l( zU4U7L=0cN8T61Gi3(F8h#%f|Di3#eTcfjNy06iSfg~k7cc4$tui+)-tcKs#tOd6EX zVe!CE@V6rnyk;I+TIQKnJo;gEq;R^fK&#hl6Q5XQSL#upnpJRfbLz8KFR{UUKO&G| zTksS3@r2zR(P<$nE5 zYZ__cT4M(2k3LAlMKa9%reLXJ6`tRd4|ih%8KV~QaCJszb8O-iV&MudPg7Db&5$%M3@|(~iz{+b2KhUw$4M(edMEZof3s9}YjxUGqgc({VChFRjC9ACk$AjHIK3~}WP&mM-u=Y!1TlsPAfJsB|PlV*h<$)9J41TgFm@v0ktT@aEAn z&-(0Ly}po36B0@7zCXV~UJNx=mUl^@Cm!|4NDADkHgPk)GW=-zX?$CScA5~$D|csq zJ7FIGu%|~XYjZBa=+u2!e#Mzy9uui(1-)kLN`7B`EB52;gZy%=cN7uD_D?4tyzbe# zmm}X-fx?~@(HBr`bGd%MZRqRqZ}X>>3IxM?H*;tFmp**@aHzZG*SdCulSr6`1dP5_wd}t8^q6XnWr~h#jVMyT>U;*@;Xtib__)67pOE+g zrQo^kS1KmfI6>}s-0>7R2!bh)M2WbMkU=fNP&^%}k4BNwCWnutcD+JY>O;rJy#^io zqw?qn5}cx@-3)*D+TfE0#SU9i z!nGK*&Yc#??VP_!9tqlyL$SU1p79BsmC33NmAtoVOay#tl_!&wAcy1{&Kj*n*91@N zl|50_E@V1;kGeoA+DHe*V{))|2qMRF%g$EBYtu;i*?1^C2Zh?BlN0`6xiuX!K%LQ zzFa>+`3{anRuNm{uiE?Qm{DdL0ZRjF=k-#44;EWxYR65dmp-zjj*InDk!O?;f4=bl z4qyhaKNX*2j8BE}BV6g|2p3~6rfy1~%4$DCulpfv<|KMstz+>SjPsP)GUFiaJu30g@!EZk(G+3ayX;w}RZ^=XNa(ITen?has@k!O%TA zLU7}r`zN(ex>2Tc=R*Cp^lKT~_c5t>wlgABK!Gy|=vvVUPuUiujCj}_=IE(|nB|+~ z!hR#J<9wBifQOSc3RsJKqW$tdf_amvma#x=XoX`iFa+bdm*slOEZ6e2L`YAAk&ImR z^`^A+1)R}i%u|^^X`n^97zaz5@V_0=Y7bt%O=kigVU1<+4Sv+d? zq`_Ut*Q>x!oAOPH{6_*;rSAd0*$fxv*D1M{5SFU=T-o`euD%-`Hf^o}q2m?36)Ou$ zyNjh~u;X*(ROP^2$rT(Q*yU8MmQ}o&x4INFU}nO@j`?B#Wzq`0G=5R>L}%mnUce1Mr(lfxdB){HXiZho>zS?zu3Z zFz2HyEtAkDrRfYj1_9@Pc3-^h29oIvms;R`HC}!BavGWTan3Il zY2EL?GLU{rK-=7O-mg|Tp%nByw-4;%q`o{7y%cYjaN)c@p)KcP<7v7VW#2u;?-J+S zm5#@HQo55d0fm+wOM=?!!v!LJQUlj-y}kD6v5j|J$2_9=-Pgx$>MPdqb}Ge;Nro#k z8F4e5I~|7Se-4^tT{Ln9p>%I#2q%0#ju1kx69BU;}1(XkSR_F^`}D?1z#?&3vf-*R60kc@h2 z+X@x}9E=m+0(96DGgWhi8!S;;n}H<$+GkJRH`F+^2-5Sp@5kW*kH==sxw)m4pZ~(* z8oUfLToH9GSTk98hM_!Z>iqSQ3@ItJ+uq;x&)zbS%TX3q(ZT-N4jO9qm9B3KxT_c# z5^jA0H(yACN4LHhU9wp*3Yz6~fAFomJl0_#{XwSbt@Nw->D;$CS#>RerLNJ!5jR?~ z;DmCNzd({-)=!aL{H_0%m9rKF?4JK89d#1$l@1OKi^Mw|@x^X7OEP4(YuX%x7se?wYpEnqER~LEqw(eLYI)xVP!mWQ)Gf9%FZ5AMgE~GQ0t~s}-| zL7u-66WJ_Yg^nXF{>s#m`!ef3%&F;ZTCl9E0Q(FW95o4>G#?6YJ6CM2Rem-jax+;_X+&9W0#|!&zShdSabjqsq zh(ta%d3rqj(mN;NMUk*qHrpRu-u6G2n^W~va+-NPn)$|2p!Dqr4Bp6m^RIXBh-qu>)E&tBR3GnVTM(tjKLPrQ@O}0t?*5yp4=zsG zp}gbz?Oi}r76ba`Mb1T9QtD>VQn!w?~sSvdi*ok3_F}l$GU$ z#l?O4TU&>I_&XJ^T3OM5rR!eem6ySqQ|tD%7yK?5w2B(3&T4TKyg0y#`?F(;TZiEH zE?(kV%)fC{><#Djnf{>yE)7v1_rAcAOgr`9aR#zu{6j#q_`q(gTE3YO+9UDz6*Dg_ z!duk~wtRvX0|S=Uf5S^xKmD42^ln=*CI=P&(zr!;9$D$7*)3X~<^G)$P<)y2EI=G; z>1-Xm5FZ=`(*inM?ufkggpIp&MN%Y(&UGtH>_Ct%lw+@hJAXw|WTI)Si9P zWR3$;j43^p|B>=59lJiBlJH}U+Ry#)vIp(*V!_vJ0MiqS9NugL0kx;<6sGOA9*Q@qW)v!q_1+u!xVT* zi{i06NBWw2FG;&}(2Iw+lVy(2XJ{Trhf%@;NqdV=s)8KOy4pzYHD!^|`Y#SP5+L5% z3q`-8c(pV&IVE((3NQrXcX-|~3<_PV$yvS}dKi-P`X3wR@iiHZ^+k>oSIG;pd%B{{ zC+2_*uP&W4i%C4No!Qp-jB5JEqPvK1L=U-!f}&zZW@$G*oPqB9OH^%jiW%s#^F~&a zUTHi<@k16)Anf3Jf_e?^m(57cM#{@Z#)#~IKV&9?e$&5i`Ji=wRB_`VOzt0B_mQ&Q z0rTZr0gbsgRixh4c&}`oLOZMW&_})vn|)9-KSIZ~y%Q1_Vw*S6t7p4~&hiouTp^0P z)7hA>Y~5S-x*!Z2w7979*rqa$z{aDB@{460qkLvdVvh>`u`j6EvNGUrEFOfH%Sv44 z-apnu6BWWSerE!6@R|PMB;!@(LBCbNUWj>J1Upi1XQ!y!TKcl)XUF6gGQ&Ri5V`N| zk6(G2sn)bi3+T|;V-58nj$Y1e>c(3udE}WZNn>jxPqzi5WZn*%JkdkgM8nN-QAfo+9B(m%aABC}St~FxVt?4Hm(22_PcG_?W41ww1za@a3?85&D^3bf~-fOxjr# zwPgk1daNAaz!uraV#aGGGN0*bh!Xqy zHh}Pjq=oarVVhiO@reuxdP{c?!AB{S{U}D4qP5S!mF;r^fFYI2SOe6UJBn-Jz-jN< zbTTnDIyGD~OJMQM3>edRHnkjjDk&3@%A($1#3w?1$WOw5sznl0`l9G`Y>2iYJN%$gJWZ%?|XbZ`3 z%(*l9baWPPbaCte0W0{wN@1x>L#r!vf3-33BNME=Hq#tMF}0lc5(yH!H%?}u%QUqZ z+g-fsyW7sb0YsGRx9l&WKoUn5TWG+Zbd+zne4ZG#?qee3bWQqJ7=X$A=`+ebH7gY1crr8;aqLHPaI^Lc7qlKv*uLgK z1n+{QPRMxa5oQ#l@O7!$bPWkv-D2QN_R^>GR|;5JH)yN=UZk}sV-j^^jPUA|GcWYB zX!jzunT>s)IG;JCuf*~c;OrBJ}5u{lCdJRccbz2 zUp0rvhR25N=}d1mZPcr#NGchiPlN?8G$I#1N9(_7?TN9%F%O)1czwzYz%gPSx8~*o zsdzEQF0MeRbuD(=C$>K>oAdaqDwg1r(7pN8#9f3*xS*JsZ$vsS3pcS%4 z&2RR|79uUU7*U}>n%&!i+GzOr<=k`6icno6oc93=#C_JOm=J*(>w~Tp02i_L!z&sQ zs*J~rL0fxlt{4aE>S8x1_LkOq*xn`}S_gHiXtF&;pVHGqiimXtZgrjc2ukLaosP9!>U8^=GDE0C1Om&Jh>VLzm94bt_HWwXTDzeDmz zJ`w9P>BDq=bf|t2Iu00vHaH4iJu>SNS-RV-sn?k-!q01nzsF`SLvz8109f^kI2rRP z*q~*OZ{IRG$7dwfi5#U0O#K1UOZVPf;0j<4@p6ku2Ot#8e~%INdlmNkL-P33VD2gs zesV7bIok+4VvGe?f+d_8G!d?m06XjGv>#yxt!|?`8@<)cyVY;gL6nByH1&0d~ zH@G^(P6^>8U8!{9`*5q)(ZDj*czxF>9$vZ`Neh7M^mrF!e26`hJ7J7}Y|226&}e`A z_TAe+HHg}a0|QqbRic*ej4vXKyi>p%8+v)?M$ml&(m`-`q67=9od}pfu&d8^s%Bls z&rh)$4}|u}YKxBfrW~59fUCfE7HN0sHKRJXCJdSLw-ABUIPfaSFALM#idUNzn8eQ? zT~~B&8qK{Kyz69qY|>crqcfpWL%^i`)$5dG6My4w?Sv5hi?CIH^|KP3UwA_zfiG{k zk}z8u;B@{DRA4!4cYje!|0`&3e{Rl}@Wpi&;313z%mPoym|FIEl1{DP;a#gKJ`@wy zzqA%s;j>o(w21VKh^FRlaE?!@CPQiL9d0rZdvq8K-XGjs1v_bCeDFY?Fb9FM&j2fU z1PuN^(}_xAEX6Bie9zI_53VuCo(0WpFdrlBr*^^=FZ`it4=bMa46ezzl=Wj}L{M7i<&P|DXZOiZo{U`TUolcofV zKigF|RjOLgn0}%V_fymu{Kj8VNJ2bNWN$48PgxJ$QQeFUrKVyPK?cDVJ5ns=BNw$kN_WUhi$|ndlfgR!#7P#K&i*F}l5Y<>r}hd=!dr_)_f-Kztlfhg4AOP7 z``9b3tJNPpMH}lWVf%Ji4SR&b)aGKs4zPtmRfnn9 zKjTWzXIk1DP&X;Bt^8R>(GAQjvTHKN+%~(0ij6?9Cd2^7 z1i+4Z$N_>8YDEw`Yoged5h|`p5^;K@a$I7hpzbHU@{phYH1=+^1nzlT$VKt}WwdMF z)9cUf%osg7W*fV{NOJ5u8lqoG zl}k^?mH6`*Md&=Zyq3TH<68E2xyie*E6pi)=i-FkpKq}|+u)!DNOu3be#zPAV+z~u zqg>}7CLFJfc%>6psG!ItpwQTkso(vbc<6@+$T@^pv*1j~nYaDlHH}fS!JhWP?fzbCfpn363g#G~X6MmN(D}%Ur=!KaA5f9PU zz$sASN9|P-MADi3I}6PP?tH=4Ex6Vdn!se+9{70jY(5PK@}Ddu2_2c>B`_j)+QA+oI0B3h+z$=J{!oms9Q((X zVg8@LHqK}80C+bE*%3`Eyz!MYQ4>eAGCqf{8=!eYj^Pr6F>U-k%#VhO(A%B(Tse0p z>!r{flFo|Z9E(37How9=Yj`n}eE|a)?hF->|3Js@lC&NIFaK#(Y(Jt$)@k#x@V&#o z8QlU!<|)?~i`}&Zk495lCVuSr+~Ar+sdp(UBPm^*8EIXyp|ySp?9dI&G^ylWFxf8gASLxJ5y}WL}A064w2C;QJ_Vv zJWvNNU;Np|tj0~%Rvf(=58crjs@Pe9HK|dt8MaHHm;Ft9)tf!u^v54zBvB<^+5r~e zli7M@QI!9&f&N2Ol1TDu?o6?x1Z+ceB8CnTUF$b4xR+DLS%V~^vj}x=EdyJQxG!D6 z1YvDfY$>&Vj2^_$&2b+;z2bDloNibd^`@f}bltvZJ()Qw;*{~3WX*&e?2+m^-TQML zV5!X*PfF*BC0wjd{EGIwT$592u8&}@-2*54C0d|X~_4d?@ ze{6Gk+Va0D8jO$B!xfB_W5yc+w+}0diB&+9F$af`DD04Cs$wF2whKJKS+k@qLfpFq z98%P^kTjW~Pg5q)as0f$Ghbwm0K?4N7}=D?Lq?q;A8r8QK=;{2C~%=QVuEV&pCcku zg~{*ToS@JDz3LyE%}?GtO;gjQZtgJYgTtJWaDbs9xoVWzY;=%r0P(h*-}Yp z7+u4(t9Meqron@;QB^~9Bdp}s-!(4C=(mS~8#Wu)V=dPC5`Yg*%VMYThSGEQHJR@a zVAc#+P+tEWgM-rAT>H-6iALy}sF<37U!JdtDfrM4^p8ytcFq8tRH0`5J@MOPPyFr7!_*D*9DWAH$JECX-f6=K`tr6*uTMyLvXU%W;qyo6v$jg45^Y( zvJi8B+da-_p(eEx%NK61-e|dsP}+W*f8N9==J zX%Awbctpc3{9}8kw(Qk>mEpTB6)O$MYp;yUcO`!9D4)j7VU8R6zZ!=_jOv1NdZKna zv=f?sd>P?fxuMTJlI!w*-PqyS0VshtDMFjRzvWa^8Pug`T;OCvYS!bNe~_1SrN{dd zUM~Vs$MA#B;V$?=&-u-SB`he&_50Ng1SMi*YfHRuRu(_VnlMw2Wr=Dl#l~x^UGF;o z+zR!4=#8d<5g1=v@=Q*-1J4(S(H`~esgdbvfX>I-UoZG()*~14E2+FXqg`>o>2^tx zwqAvNnPYppX|z(B*NFI|arl#Q+;Ne3i3O%6vaji2UW9Y+$S6XuD475!r? zf4Oe1SMZi~lkp&iby4K~#R4x%aZBb4mKrTl{WV3$-f`x+-HZ3I`G(6Q&STm!aaCa6 zN2{kLwIezw?_4cdf&#;uxxYR%>8*D`G$4Hr4&G0uTujz$iDU6M1+<8rA5$x~ap&03 zs7Jom4O`&l%VQHANY^&X_s`wz*xJddp2r+(bXk~6*EMJdNb24`sTN|x2`4fi2}w55GQ;njvC~Ui^yG$z?sPo`bOc>e z6Pi~k_vlve`mj$|E29llmY%yJ|6*9Dg@9c~fMG(bb1i0wFk`L|^?4cUllq^F!+l4e z*n{HGN>x58GWM;Z-YX=UOP&*F^4HPtDZ99oTV7@IZj=Xm0h8dmdB_mH6M2ai+icM8 zppI%YmhWs-Kz=6MC<}SpCRqqrmflq=waciaZ%83&7GEvOw0dB-l$NsYHN@=dc2yQx zw-02=+)d?sSm~%8=#*i#WLj7H;p$Y`=x8=^6TbndvQIo`0_(xqFJj*Or2`ZN7IUrU z_n1A-67#&7Sm^P~TqtFjyrA*^Zvq)`{K_{wqjIQ0fx^G-jKRzH61hDeq7L|w7eUon z#(7@gys&XV>R0T7UZ%!h!y8aOufC^{=do|rGax|Bp z)@Xp4ommzBknWpbzcLa2a3ToX4dvArWLVR7wOQSRUz^Zs4su9^sm-F zK3y@NoOY{Xx0dvSjxNw|JRoBTPoDhvT@cwK88{X2C%nT|P@1E#hjdiHEC&`@6t*0@ zajLK&A)KA3;7FM^vGB-wL;=CSOa}o6wShkaJyhshTR*$!!5PV&T$T~@a@f=6fp(@r z$PLr*n#4l~X7fKbmwxMgPTH;;#q+4EU_l|Vj3!_}i=GDygLpvPrax9f%W_Mf*T0D$ zOHhvpz8uCBup9K*aDT3T_Z_*qmay4t$IP3=0dVbW>|G=`<5|bN%9+eEmsG!C32x{G z>ljsCDeo{B*V7-<-uzy+F3NcF;e57<@#Jvl2oP@P#Q))nI&XGyd@gFq*F#6k-)z&N zI8EzjdZ~_%{Ze9Pvlv5$mb0xg+d%}KZN3aYS`a~S4drfg#w}7bUI*bX0G1Pq-yjmL zCyUFz$GL`2czvkoR56rlfoK8S9*2BsUuX0jHV(?C&j+vI6$TRUw&GaAG=h2BR|p>* z1Rc@UC^4d#+)lS0ULj0IR7^XXIeOUTy?mI!aVO~6>hBmj(BY$f5lYWBK&Ox%pr{;o z!V8AwJmj6e5bcxb-py)?XFdLHqt};$n2S1nX?N!x(bSe@|f2E6qL@JC&#PIts#}E_qIcgf6Cg? zh^E^YO8ladB&B(Id;gtrV|?TFw^HP>*{!WQvAyWUap_z6l9#E%~qz@RiBeH zKTl+e8U+Jal<)u8#^d%2nOR6!gus#OoN*WLDcZmiH+)kad>Sv+6+@an_4xcxVk2Kk zyZgdfJ&9*ZpWC0%UkuA#)|vd+){9KTOuS^BJz^F$b2kC*=lUG0!Qe{FtBtfxY(?N2 z40$@-p70_qeEJvMZl7*`snhCKLGNz3aw)EOw)ahGxD*$+AS1it=XOjx?InLzuUjV%p}gRpBx zH5|_$wW5kcI(gPnQFX@yb|}2tbw|KKywwj0Q;dv;4CyQAC2q*g$srXkLIfSpaxX-r z{Sc_D+qHq^ zP!=lSc`)FweJO+9+TKi1?R#*&5bN>&wTI#5S16m559PIX=WRZu$&T_bg}MAHX*fS} zNHD(47h!Gpv&)1t#gtB^GvVD^ z(NO$`W_6|?EO0cFdXMT8m^rq;S2g;7ILvzcLRDw}Zy6uo?~f#3UwZTaa09p)u$1(p zF`XoSEXhfM9yZRrj@Z@tt1y_BKU#JEAu&>XH(j_F5!Td8=( zb)TTjA&=WP2RM2L8FL5gHQV@wrz(2YU%xPPh%Xpm%`sG9h{!!CjTeECUx75@jBYv-% z-xI8$?a52l{5v;dW7G=lO19Ny?$l|>m}!Qqf2*&N-LIeB0{?{4q@>%pw@xCuz`WGE z@4i%x>PxQ*lRG8>QioY;)AuI73o&oAe+h`Dz^#o3H(iA|F7f#FV1~vhO-HT=``M9) z`8cc?1kf#nirr;_XvRSQjS82TD?NF|=NsIx-466Nuu$oX;rC@bx3Y|Rg!~K>y9tZ;aei_hSr7@Jd!tYqe(rVsoCX{~I&Dv7=EpdF(X5~rw1KFVhG1%So zG@)C3*rqWrX zr@7P5vE@oeFB&QRx44aW>FE(9cOoRht!Pln_rV$9cosdkb=rKN|>j{i!E|Gn{RAsHVs@#$7Rt^MAEXLx^^*i!ptCHOF4b$rlj@WQ96+$FvnHY_o zj{YLDIk zAAz3{^w?kO{W?YaX z9lR^Z*zch!aj$b9s;eH7;Xjl= z!yTgHaCMsMd438uKQH;*M$4-|W8~~vhJC#(c&!dQQdxW#2A}aD*VW$Kz9U?ucq7Fm zHu)RdP9IRn*6|@!41?R*ygDAvKFfR;wP91c5ZNfOFL|5`a|0>K2cE7y# zXI09s)v#;Mz2S*rk9)rlh-1UXf74ACeao@)Sd_jT;|}e!ay>1Qv~>~Qgi5>~*CD*Y zocYXM{kR#Q_bJ2lmz9Z*{EfLgbF#1G+*?3g2nmJ-@)wPxMeO>v)hB-GhM~ZaS(7(^ zyv74cekVO2d#!*Zk?zNxKGnjO$;^pqMtzb#GuGzr5Y{Ca8c0!JUXY#tS^hP$waBW- z!tYHu!bPk8gKTY=D)eD{e`jr%rHAQ1w#&5ldlMucm9}TPa`Uz^@B(}FwuK6sYq@{t z(x>A5clp|?#jpD+egu*X1-S5;sq`^Ga z=Nza$+A978$k~hv=x%vPk_CF#D&HAI0f0}=5p?Btn==x zbhs!#3Kh(fvU@}Q3zbVG?SK=i+o`y(yB^#gjE7mdD@w%NL?wGal-@t!h>_4^& za@*wW>l{usJzm?_tqbPft81N35;ZsS#-Xb{$6CMZ54Ud!dw=qAbqgv-E5E!jfD4p` z?BIuyYAwTaD6z**zUewbp9f1LzfJ7NYI+9gmpcO9R#zUX+x9)#kA`F-pjT>qCP$nFQmQVsWxiVT^Vs9P$;&bjqzA0@J5Z8)SB1!D zy+#&!(~+2+<*?W_2T}r%X@iHB0q|bXB9S8fl|@6#05`H|I;bO&XPRc)6&jpY>T$_g zBTYG5;YQg7(I+EneccQ8@!vMPtz%Isv-#3d+ zSxEfa7QUrFnkSTJQ~hgOl1~=L-B4lRQ*tYLJ$H~HH}(iN|D*g!--jC~H2HK+}+`7(jD?buNa&Xed}&$UuTx%M#< z_j2hHw1~ab`Be&Teq}K{AgXOZ>(ZsU!Y<9;3pPH++@EggCjYJ&w;2uu42OrTv+t?f zJ&;oH`I|7^$DT!&;2aFZi3s#aQuWrJOlux5(q;Q^RcV|I^W0Y2x6Sd|W?fYhi0 zQFzx$RVq2luVoL2L5`^{mRVqY=FEONn&xm*_R?STFuMyWPDEa(Q#Ge6^WnW3Rl|P% zs9b44VBD-iv+P2g^(zZ#net1wX?b?27jjG0(}(-xyp;Rf-xc%$r3Vyvucx|D3iOSos$@v%AYBUd#SD z8>JxFnSX4s6&Hwe+df-mPlaF zrY1{=ZYlSq)~M(4P=8(auqU34VCr2(gz0%bLpJ4vQ{YX*0Yg4MLaZclD zC1lDR8ia@ub<1<0c|RS+NWO)^p7dR{7ZQGUiEHqRf$SZjjue?E16XmXfWdW;@CpDQ zD-dzI%x+%R6o_!Ol$J*_tQT$Uvj%|df{$-iH*gSq`Hp;lZ~BudcD&PnR41H1dX(`E zSzl0)DC|)-ZV#LJ{GQt@Ap$uZp{2zL9Zg+eYGB5<5-n~A(|Q2tGpDTa=}TOG2+ERg z;8E(Nr0XAlAcJBOy;Oo`J8B7<%VHleXdU2D#)*VlB6nEL+ek-sR<#`~#x!6)+wdXU z(P9E-@&)^>AyzBXMMbhjI@~>cJjK1d{>OC2M5z;ns4K{O+`(R77?gFiKC`-m+sg4q!k=t^6#^*JN*k?G_B*h)&vuU< z7{LX}Vkp(g0_iM~U7Y$6Fw{QLccWn6W#YeMM+<09(G3PCI$JrRInQ5*brY^z4p)Lu z1X2PTWVxtrMpB*Er5&(T0alL8t)c4tYTPMdF5Nqd}*KXESlXr;g;~z+S zjlW-P^v`ddBc#7S!aDX!j?QL1$gbRY7I7e*sFqXjRdwvqYYwmS!;fzq{;}l;_VjET zK_p_AGUk^sBTgReIa|{KILpsaq(uZQR=2_()g#6wIM>^xjS$s7O*ehSK0>M?BtRB5 z2M~3bT>vEbRzt9d(KpW45^26A>T$0&W9!X>_sh)wT8tYcvaQUoYrFEI}^y_4& zhnTE=HnClYEc#>pYgfQ!so*{=EEYZxGN4PHHVxlKrN*3ZdD7soXuGPK*<@Hc0HK*n-PG{=jC)Y z^?cylTAKnkiilmy$QmtRXINVVl)epNXun&Nzz8hzQ1Q-BM3eR&1KYj*mIfGAXmwZ&xnS z#xzS_X=meV#XuIbTS60ySdYXSp8|FcWRewcoVw+}#k($%I7aQ{OSb3{zvy=7guMK~ zls(6d@1+3htrz&x9+B7wEblUOmcHck(qX(!m*zD&3#1%yf*jjaz59=i8)O7*Nb=Te zf9+hG!GCv~d50Sx=Ofve8m^l~XJu>gi?*wGcz7hH=^I+(E4WnXek>|^rI?&1w0$T#&%!$o0vs3;Y; z#w|32eo0eA%s>L&Xj_XpI~Xtp5Ii=zz&tvqGqM73(u9IVW8&fd4`D{=e)BA`duJJO z_4(L2!vefVk=htv{s)Z6!?)Mchwe1S^T9e?h2T9#ZVzP*WKW5kVb7~6w^ob-o9yB^ z@WzQ-*#A*18bC$0j{czl2Ln)W%zJdI7PrTtd9 z_X6*7tk?NZ{3GL|%dbP>y^}psAM|PW0=dWQ^xVFzq%pJI7<@ZtqkWql%L)LX>xb3gg4-=nXfX3 zhHf)A5+y#nTlfGuw^P4@+>KJ-UqE>yv}g8q+&&`TsySSB4+`C?A%3wNnOTC zS((YddT3?x0^UE;J#ao$^6s+FOZ(bDFxBwB)CHHaWZkPZTgob|48uj0y$=4_^@W`i z6R-__z^+La9p5Rnl1;&}Er$s1uJ3jT>Wz6ELF>^D^<#2n(|vlmfwgVcx^s* zsC(*PQ$g|eYtxUt1vdDc8L*;rEFIVHVu#js@3^&75Z`e?0ADOSB(p~c_L_X}vK#no zDF!xbxWfq1>r8sQ4tt6YZfTZf3Fp1`y(6Z-OCzNL>wM^nh_B!8$jH3tlY48r9JUu3 z=kJ_AN>fjuQA<%1vBR9psY(mtxw?Land^)ND)TN`+rhyOJYZHb86$|e=$^lOdjuZ# zQle4`tAUB2uJ3N$5efJm1ZX$b!vZ%vR~0x*#czzVJ@ z?E9CeZ?WFsda+OqY$XTL@*Q%u{jbsXF0n0OA{Mp6*u=Y)WHXaPkET5<&?ubiDsW!o zg<6-Bwm!=J^i>*4|3yy2;(uxayAJk_K7gcvivxcMc~Y?QD+Z4232W$li}FlK2Cei@ zwY3DKMx0WDbGt$`rwzhfFZ=xo+9n_5khl(5@e>X(-1khdNquDnZA1ZK`r|G9P#h~k zWCh^)XPCEvNe-t_`|`6n5(lWqhxuJr zCM>E~bVnp{H*>Bo7xnFdPkq{fgE&o*V~^ptfET5G|5DvfUdW3;Bfun#K-nHvKXD;> z%ghXzT__@z^#e5< z4g==9PLoy|$<|!aY017SsbNQ&WE@8tR$IliOq%X(@OYfo*^I^BbV0-i}I||-Zu6_vSSk%g3gsGL;-d;zg({%4GH4fUM@7}L-PFB=g z!2mUroRq&iNJL4H{tvP`^G_m9df&G11j}{`=pp`HICN zf_G*Z=z*V;72_3kEZD?5#mlioA!fuu2k{`7-^7Y!GS)~u)Z0h+RQGL@H`n1IZFe-c zqkl7~SRH3-)b^NLyfB*iE=UE(jNaxc0R0_>nH3%col_e@1GkA-JWG_K(Z692^E1#6 z)Wwx*>>jZPvrb4*Ra%BMf4xZp?|v{)Vuf2DPlOPEVqwq2NtE5n|Jd4}X{AqzuD1W1 z1wtL~!FOOh-r=M5tLU>4he15(ZQ$gN+;bhnigNpM>h`TE?TJQ4Uu+O5 zc86u$3+;-Rw^+cbpYEK2qwLKAYAk7(&-wu?3&l1pl;l4|#tlY9wt}uWvLe6eqH(V& zY>UmZUXR7?{f`|k!+}IMr5PcKZ}T8{IIja(o`Dt93%YtoA-7~M2Vx9ixXTO@ z3VOJR7i-X)GgFyF9guS1+?*akY|I1V&LW9|Lu&5zm2F<}`RuC_y`?Q4acu7d>Y^j9 z-Yz7<;wZw}?U!LOL@eo#PcQEFY&cJ~{vWqIo|Qb$>NRjFDQ$gEZ{aAiwwo>ia&8qO zZq8{3c=_yNv?6ua>#>eswv(v4q|)|+H>lS1qk9132W9>=BxsmJbDxwnNnw`d{p6ro zebYWGn>2b|^1$ld(Z~^G`-xgWf~>j5@U2P+uyLjcGQl=wb*-!ciq@*~uD?GCW}p;D1xVvdDbJ3+s54q4OVG`B9$UrRcQrqz{o- z8Z_2UNr|RvUQWS--U{|Ta&;G_;rccEh`N1}r5dOO1-ho$>gYP_OvsO!nc=E|BIp^q zInoJ(ygt2S#Iz~@!R;6G>gV{I%HuiEv_hU%+@gEmON_>1^nxw~qp?np#-2ixoBtM= zcKzL4682poEw+5CC=P;*=adr2V!H_JRWU!lu1Oko(!&n0yoqhTBP`0CvdC)DH1 zGQG=iH!EHpfB@arii(!~%=$EaPmhoXN8g!Ut_psTsdz96ETxyuO z$C4UUxrMqmL~T@eu)ICw8|tlcA!8-5{CC&*Aa%^WAM%Jxi=O@Y=kCjRl%V-jKfZ*U z-q7*u1ws$^s4AsqF<~_xO|>p&{zxM=@vs!*-=;Nb{v&mxt+~6P-#|jv!QlxHiJwjz z9mRhjX^-jvdpcnyBb_LbXgl@rWeZ**Z`ve@2dZ4%WEF6fKw$Kh7!2K9=j={a=kNx1_|3HqHA0LsTphATt%t3oueJu2~KoPBrg0AZ`w4!Q5LMtemTXDL6mWw&^k_PQ-w$g3yQw? zWcpC=+HOYvMo6%<`@EzvIH1QAh?K8LUqb(^qo-3vdgfKC@TldFo74YH@l5@)1rJ6< z$2%Kml|M6f{g<;Jo;dJV^ua?_kG|&ky(Lsi47J=RaPy$Lrh+}9F{@MZ)|SeHH(x>C z$h{6Kd%0C2&7NryBWiuMz!s^R<31dWR3FvVL3TmC&N&EAB}($#R4nBjPPk@KSjyf% zE8-iUunP`HS>mAP1oTDvc8}u~DmD@NpaO!%MBbWE(9tI#_#tWLP2;ryRl_qIUZG1X zEnBnpHwp?33XtX9X-@u7dQL`E$xt-#+bitApBIWGNf3h@0L9Jjc8ePb>`1)r6Ggbv z6Af)sG%y51(U2{bv7}Naj-S=@@*tQ`zSD)0rK2l)UEr)io_MSTkJ&|!#{l;EA{k$N zvheg>&bvx*3v;;D3=1u640ko-G|1sKkGC(Cl}a_aUlXz2R=J9z#jM%n>dZOFf4xR{ z&4Y|6adn=C2d_>k45cL7>8{zS%v>A!Fk8`Fb9$XG9aICOn1bk6_cvt@Bm0WzKt8h# ziz9N#-*okM4~&=0qgP7|e^xvd;6o|w3>ff`{^06nBli^}TvVsWQ~SkDT|oR=+ppG< za_WP&z~yCU<_}KMMdxUoS?e(|1^@`U59A+bZc-0rp(aNuFgJ;*W_|j|HwCOuEbOd~ z+#-UPsZIrCZ4@|t!ppELJJ2?wozj|EblZM>ZQGd}JL5FOSgHAsY zQ6e1(HYoe4^wQV9GYX$rS3P$OE1`zex$&PO-Yu4dFBMC9?!2ZufMV)}uv2UxGQ+a) zZ^m(tdq?^4$Js@9h1mT5h6iCwiEUv`x0H{Ige5D6F8@RPg%EYM&H!;4?69{stD!l5 z>MuVHL*i7hB+WXl7OF-IR=Inkhp426{DHKs4K*(GT!M?NATJiO3u0sZyoQ6MW{c)>_gY&rKFZZRT!osy$LBAz`ACZKfEpSk#U5f7@Du243A#r4Vm2gm zk)vaKTEV2odc5r%eGPVup0|4K)V)Q8c*2B;rg!e0>teFlCV{xkihE)|>pyPwC%?La zE=CJzm};HdyIq=?o8Q2Jngks|-If5f72jeEYE$-52^vTj^1EnZ4>hFw5acBEQy-tP zg|tol@f7DAvkVUIE1@?(8c{IEoL1jB*3o;2W`_(riqnzpOq)$ zw|PJ*(_ZiJT5?JVW+2-a_z~fJ1<<7XrwGzKki*e9Q1{? zeoyniw9IBS9qL^q8YmVECaycJtSrqWU4R7G;DZw6Dpf(3AYj{H6RHP4f6u$KWGEBG zTzj8>E-f|S)xMstm%mq3*Yl9w^GG@J1oX*Bn--LZZbU7-w=-!*FQ#mF=BYn)z0%ed zTIq4AKCCihkWD-|t*n;z#XoK}G2F=2S;!1j1wg&x*hf04*6j3{%-`?2{N&AV6)Kh+ zD6izH++6N-(2dJ@S-)-`hUc zqDwRtHU;%)T^D0w;=tntbqy|cYiB>y8!S91(P=oq_U48~jEsdZvI=!eZ7_a)9PbPt z16!k8q16A2K3gvllU)kLAtj0l2%Jl8fqHH;$l$iqK*m(PE%(I%Jc!VQ+Ds^mel8~laHvv zS2tf)Q?|RcMeMvpEVCAiYmxDR2^Y)0hc8?ly5hm}?>{!G#3G^x6zzB`vmGHEDNIK$ zO~yZ$CmK*=6Ru^>e2b|QnG-&08ItV=WXglKC2`^3|LCdk zGc?VfU@gSHBd9<2JhbcLK`MN(zh)c@#tIsXhNN~X6;Xp)^Y}o8#!BYaJ)Jyfv;2$e z6nI1**k~G8YSsts*r3k1{OX(N7|YM!$4qkKX0pR#%U%o@H{7PCxc5YgB!bH@N*#p*Tm@4x86-vn4&B7R?iCyilHeN;4 z+?D0jH=}ZDaB;Z zdNc$Whg*1*F-h9CZIgej}ceVZNNQ?ABJb{`7r zxDb;uGh%nF?=HqTD;kIhN+HPNd`sZMkWmw5s7oqkPAjy|B)*fVvQa5$d!SOPV_iqP zSp9=rgvA$d`nj}0g^hLBSh+>@x6+Ajt;mTO@Y|tZv*w+<;+HDr9S1I$nHSg?SwVlT z_y@Wv%v*fctZ?hk)b>l*lq91*AZn0U1iWfth-yd_=mrblD>F`;_prsqtEns@-M20g zPA^g_a%gSBwRQCkoN5)dC28!f)rO+USCy~-iR6Tuw$g7?|6lle=49`UKuyY_TGVT( zk2RY--JmzD-Z6zumpoZmO)dPV!#%l{v`+&fSy@LJtohNEg2so!LQwJ17cOsA-WqCX zkYp3BQGf+eF|;yc93L$71pe+0Igd?92q(oI=InYL{rxos#=WGh6T-E)^XAlv>sS}r z#a}kTCwR`C5-t(p2hdmX#u`seQpUc`=|MDxAfgiVWyRb9KKN9wky zc&J0sYZ{+g?ND~fr;-{0;h>rPrjfn!?TvC%gHHFC>2E4C*7_%jsCXxeeYv9dn@A3( za7)ucyd5No5Q#eV)f*|rX&BR@rd|->pD=FW!$(eCWE%l4MLHIM)x^oV0(GHY6hBY5 zTWk%-I?6QEq*7JE+*3!DJK7>4vGc^o&FS;9c3fKXp5+kIn8KFa#!?31^h&Ownji5_ZIZU=EO zo+Uom!o^U4yv%w|wfE{yE42!GP4J!7%_hk|Riua2YX02)yE64u;}yM3)p=ZFynBGR z>_NcO&qW8B%^!#;!G=N}@Yya6p!0fv1FYDwShzj*{yFkyR*PL8cZ|W&maTDG!uXFG z9TI`#{{YRO^d|4vUsO9wO63=bpiu!+z3x+ox{1gs^Al^?p0_`45&jsnw^6xzU-rI{ z5j=>IYMZQ8+|i}gR=&23SPieRwi%NSUT;jm6ohJ5pO~-_t?$1hHMzae1*S_$Z~UXs zR%e;_sS=58@~?yEpQO#qt;sH;&-QP8doWW3@hAjRyPXBMm`{TfkMT4oFBBrUS-i{} zbQAYF7#Gl$t8`pAd7))q{I}|%oPjTg-H`p=>56~Uj0_qhROq8TNrzeTayOF_9#x8C zUy3`9<$JLt`ry_jzRMj}a8;z{Q<~bpGgbckUs3Oo=16Io(l*QPxRLd4Z?&>tI(|K) zT?YPMc+|)4)jtigmF}2Nr6y<1)JMW~?!EJQI3+Qd)V2M`lU7LoEVotT^PaI4RXlu8 zzLq!<-JunRf$)9u3aZ#^ZcseC+GW^$3lSukBk|kmJ&5wKxxBgDjb2X;x^nH@zOY1B zu2jY`<4iam*9WK4!!6Wlru@mqksmD3JL}Z?39Iv{P!%OO z-gS@XTF5mIDdPSYff0$$mbxO()m;^Csmh!e#H{DVhNnv^C`&(0xK}Q1L##_3x!iXb zNT`?v;AGW9Y18(26DjtL{?#h#ajqv;fDh6{UcM{lmWY3*;&I9HlzlmQ`elmMVZNVZ z54D<*`5xwmdp|ElrImVloI)(kY3LXJop^Wl_IPbLV%JpQE`C&_zbJDb$KLQFhFJ4< zC`9?Jr^grFFr$;wu8WxBm@vzQlAA%)-{#yXHWCeLe$1Q^1@9$sA zOgi^|dL4HDjBZIqAYJ>#r%uYi?YK=rY*sBN^zOZZiy2#Jp``^b>TP(7Uvvk_ro=Pb zMRD_$=Bl{p^n zDKEaL`z03MDv$lC8GM2>1_GbqGc(S+-r|mjuUmFlT41cx4d%cvh0XlZpH(k|1tDlh zdNd&+00XG?y$rh@Z;n?6IT$>=urP#fOTTXwteCJ(^9(xw%wwXoq05u2w#i$mEUBdh z1kkNk>9rBXYo` zybH?U-UY%Uk|PQBH?IvYdd=d^Ak&=J4Wz$ooG4g3rP3fexh<{=nfl^u=JRfG{$%<4 zPVBYLQRJ5)m%juV%g?3wXOHUOH#;8}{rm&L6dRuWv3@suC6L5NkN%6>)$i4DS=w0d zMhMEh3XRdbHt5H<#8AQ#enR5c_{&T5xrDlMKozkcve&wmVxlM9I8*|zsC8bp}HyQtQ45N+pO=V($U6I zuAag@YSPlHBotWHix6?mTAv!!NnS_zHUQ9~&G@ zK@ftnUuP!pL_-~DK0Nd+?dQ`&#p$t0mC3{3u0wWW#meTu2z;QF$+uB>(46HMLyZL2orzruc#?j z!mW}B>Ls?qxNI=gkQS#~nc4HK5GHv4I{y`m^QD|JcZ*za7-^Rp7-`f@kjqtRwRxR> zcu5USF)WgVB|UahU~rLlYZ}}2+D!JhI9%yet8qoMJ1lgPkLx6|_#PDW+lS*w%bth% zj+Mpw+>B~nLm|PTHg&{f@MAzFm$8Cz!j2o=+d&gr=l@~d%4o%01f6-+1 zKPKt$s-6h`@ivlTniD!I-7ZFSC+r`>dm&Ct1uo2-K0*WYcDtqd%KQg}Ptg_RsRxfI zBPD9>?2`B8-gWoA@^O0~XBI!T06Q_}Ej5YkKqm~%MXEh@)fH|$>;wqZL__HYQBAqU-} z%>|Q@;FkZ`vd*NEzNV)(lfAwsWcCHtHSHVT`*xW%Ir_;}V%j!zGl|Z8o2qLT(6^Z5 z+6sF#al@*=_pJ)e#9t|gXBGwPb_GnaWM)5k^hZctT4U$T?98L(fSoQ?Gehw%F-j;& z5Jg5ALAF#|)!k?Oja=OSLOM>Jra;!2NqBx>ypeD5ERQ!0oQ@w#+Z-&;Y<6<++GlYb zk`DQATCfJGg!s=9Km2me+NCu2b&L`q0siw_GDTm>fi+FaI!`fiK^=#**5;!!al~L) zWbN|G`Iz?0i{5>Ve~B&7LQSF=_Z{(8!iT;Q1uan#%RFVJkW*oYeA@@k2gU|xqmqwt zta?YU;}bQQ{)YTa1i5(zw!`Gvf08O$>-(_%??XU$2oBONG-iA)7OFBVJse_ zA8Dd;-vBm?sTp&6E{e$q;)lut&GM&tp)rFmrA$?71(7a+@gKN)Ya%o3dK%$-O(7vc z*0KiTQ z+qw?#$zz>~9}B@3;xZI?Y~z9Brl48g)wJ@{H*4I^q~zS}%2oj;2g}7F3Z^3C(-XDh zqxD0`icQZMvpie@f}Tchlw|1uFUD_S5r-^)HK2AbDd4LjJ>cfW=;iHq^eQKR^FY+mSz zHl8r14W)7LCvO1Umm7SNmvdMp1%3>x*A1&c7{uLP&9}dr9xTsczjq%6uP28)cy*Sa}rU1<^Yp%sU#6JTQXh-f-CDrox8% zL%Q6XMlxaH0;&Gyo2pYBI?hSh5?R35^H%YFG?tCF!KvAY(~rj4@2(%39Ex=JQ7rx} za?Q(9`A+0`N&LM-O#H$ohLniviB#Gx0Ma1Mztx~=^PJObw8!1@lVNs!UJ(_{@;%1AMbe>;HWj2 z+g=%+14&$o@6t9R<>Q3be+M&y$>1LqhF18R-j|JI3SM%~QIAqvd%DeUx#y=k?F zc1iOxkL^DvZl)g~gI(YQtZtG^K$;cglTD(Gw>)vg%G3Z4ey5OLG^QqNu8w%&Xn*gd zii6zHV9|#wDbK$YZWLw`%SXyT6u$3%T6kAyul#PhkwsB@TDoz(yehHGI?brQ(5r|Q zAkj0ckp4>J98wuqmBa0sJ^AcSvwY7hLEC2=5uw_E730=g*`JTKmu6+|`omqNUu1lu za=jhD6$ksN@Ef?W1Y;-R(YO`+6W1f1bv48nX*g2UAGhKVr}IUYm|=Hmyc8?Qz8cH_ZSj}o_l}CCv$6^f}=wn^P}Kw0skb- zv?JNVf-9VOE@{z{AL^{Bx40(l71oPIG;A4Yy=XgqSy3-82`?Q#MWJyw79DT@kFC3N z5^W*%7zD)Ypexu=$o1wKr>6Zj9NMX%?{ZWknwYeLBdE-$xk>+KxiVR;J=)PJ_+8@6 z&VOu@Wg|zhWPo0?z9)Ht>s@4=cq2J6m)?u>@yXSB1tXM?vwT6}K0C=_N3k<`^Q{pe zErwp(8*1}SdbzdKjqbXlgswE2tdE7kLmEfk>?rJZWOig5;seYnlfZ(7rowrs^5Eag z;#&U4h=Pl5I`}WNsNQXiCiby*R2rO$(OmuhqgN#%PWO~PR`-BJA-CgfLsLXbg_id? z^4htBH{QRe&Yx1}`sotW3kaYqr-i+VwS z^0=qcYbND7qS=F^Y+igGur2BwlMP&7sm)ya=Gc0R%L}zq-c+~GJQS}oTK^Ly#z;XR zg~XIq47mLjRb~X&*TVMJ*EgraU17%C*4f=bm~DvqD_Kq3Haa_VSVJN)f=Y5R`5JA-%JR8mLk=rr23qX(Y{{coNAB z9qJQAeJ)HsIlPt6%gI)0;2Y-3NW*em+zcr>loMe#xl8!}JD91S-`*Y1IM|cOgbfCN ze{n^7C+u)flS$F?o6i$&qU}kjy-o9~*hPeIXdf~0Kzuf2x1$JHH5o^+rKVH$ ztTrbFItLo6AqRLByH8TMhR9+d(h}A?oC<$ym_HO!ri8Q5;wAwCER7*wH2424jTOkj z(*j{}lB~Anxjqf-QW|-EE?GP1gjk#)NmD!y!TMElt!j7EhwgK4`Ij#K+}GyRyTHa( z^hgCBW`s{Panm`sXc>tQfJcoamtKi?@PsR}oS86H)EJ z<4cejZw}jKwb9TZyQASQ;Co4QMiU^C_<{k>kl2cFP#3>lu8M_cvb>Pm`R|hw=ssIF(x+MKe3}=Ci z9}x>AD}A-x4pROE6B~=kK6J4=Bpruy7a*QCsT!^cqZrd9-dp}x`r(D&&lLsV)Zdk? zfKKep=G0GDwxUO0;z;N^{{V(RcywM-nsvd;v+d2xj$M(=HZ2nJF9h}Vj-c3KUM@s8 zjIp;7PKthT6c%{c%2v8+p9-F?tQSX<`G6dfj~pmXEUYsqZ`y{J zMMkQArdJY4f%vNfk{7}QKQ+!?(s+E47klP7{G9bOuQ$U1o?Z(ay&rZpaC6IHk$PV$ z?=9{2v`7{vlqY27xZ%y4ac{V>c}Jera(P{X8ng{SW0xse3|i0cK2&QEJk&WM#*;3t z*Kqcat1jpmu&mCHxct7bc=jY>TK&U|nET*ZK5qwdYzOhO_`{BMYVCZ~h@* zFtD>C*at+1!w7kBakeq9W9=A&>+6#!d$+xzOMnPueTyqhEoeVtlF4()#yifW6l>0E z^UeZoO045_AL!W6-B?{CiGdmS7ns&1y5aca%R$S4^tsX>WY*BPdCyCiW6VDQ172BQ zNZYa=VBoh8f_c_|-JW*qy}Am03Het{p3Iob34=2dbG?2J{2bQwMuNJ-(uV!|q*KG$ z9=u`~`TQbbuuRJ@Eit!s2UhI9$N^1D*d!kjK#oTdF=9?j==5zopbN4CrA5%{$qY`+ zLmV`S`3tXWSQ7U5p>BsR))M=Vw#DP~MCxC=Bs>7;9WLpp!jdbQ)Q{n$S?w)Nk6@>ofXk@bt`>c0$RQ}7-g z?6JPS;HCM}p0}rrhB1#rrFadrmjgwQ!9_`GibBgudJAz&NxiNp==)l<-PHQuiqSc( zH$9az&>E}oz=e9$bJDcDokZK`bEyvj%@Q3&-9y<^JYJ1R$`6t@Z`(ItdJ~$(mX_-G z`^E0w8Z;E*XvSflm%|AEzvOTd1yPME=)AKy>kxDqHsIZ=GKnx>$nWu-n0KJ9A3>At zoYKgVb1)n%WjyV77&R|9Jc(7mC*+cNWmJRlF7g2}pSXfWMJ|tKxWJ<}S>di4pajK6 zaul5hC(7X43T5i&)PH*K`k>+EeXD;JZ*P|IsN`#2enCyy+eKX?6%ZHdr9##bW*k6* zByedjeLrhch;PO(2gu8Mv79&mA6rbQ21!V8aTj=Qeu)8yRj}_d7pXvtt0}+5eN&a; zL8_kHMmyy_R$foFZ{8 zX%O6~Sq>NQV1M#XJ-Pk7;r>HiLr1Nry0=;SO_3lHW|D*T$8h?G61k6YfjsM%wovD< z_gQ|R1To1xzm}OcxivFc+YOX}w3E^&G+_7O;1*eDA+2io8v)!Aa zYDi{C3X)C$tD(NqKQcXdVNk^I>t#0If<4i@@^|VR6XSz3oxym`f7!yJAGgKCl{MW z)aA2&CPfwKk~shR*-QN5gj-eh7*nOfUUKGdn`F(iN~!A6pt)CDpnp5`Mv5JgV`GnK zdT)t@Rfzq+PmBn}emzIrrPjrSe4DkGvQUM2jd~;RAtBL5U(ypw>I)oS+dg1EaI0!< zh#Iy0k4+zaH%Sa)lBgrRB+ktmZ+E75MeV>9cwPyqz25!)yxh5}x9e=?D#TXp+R(=? zf}(HNVOY)QLX%5tqd=(10s0$V8q`VLd2^j_8Xv2`epfK;^H=k<1l7VbAJtJph7Ok! z)V$*^2ydCs{M?iJm#7^1+(6@q4L1s^f^B3{EotL)AU$`AxY#W$N#DjKduCc?w%r($ zuR)z73;VVJN7Cd6#1}eTlr&Ysh7^C~ z)j>DWxc6inm*s``He2fH##vAU`3a<`{Hd5T^n=a{V^6+4pYpqrqcwbc8c5wl{j>>; zf&8<0^alM2QN}X;^`~r=ueG1A7Rof&6ruQk0M+Yy3t(?LRnEe1OBqpRX*qPB#gg=s zD2ew>5S52;j#?n4sQ;ZDc`Wws>B}dyWF-jZy^Qd7H0AYV*IA*fu#ccRP&fF(Wo)hw zFhI`}r1)Zmp7}sc2-~8`oE)BddA_Fy-HKt(;!14uGkkeo=K}$72R_^vRuZuu522+b z>e;&@AM5KOXZM$b1X0ugb%syGHI-*tKHWkuDQVuGw|aNZscv4ciLrT^E~_u=D6bZZ zhY8VNdTS80MuRaol`^La4L(~;ur>+H*<`o1EnGW57=(4yAt+{`bEloU@sYpLyvrY- z^yf*_%ZvZ2XL9I7^Ssp&S^AWPIem@qF}s0b7UxjVe{3}&%=0i7XC1m)0TT|6198>( zylqn%g&spe5M2PRO9xDqCB%K$U>^HUw-{pTi`NsP2tJoQg)QlKI*_Iwgnh01)g4QR z6$bmJ4{J@rHTm|ruD$5^s|*m}RyvlCcfaM-6dR5xKL93Z(TOncbh_aoh#o-GrHKEO zV_jyAq$Kzd^s95u4)H7|MtwhU1LyQy9eNWf1u5(HFg`sMx`g9~put~snwPKZ+@MO3 zg$Ud6_ClRgZt*RlI*~32=kj3`qvOlKiMO53>-Pkb29<1}eiu5PD>mp{J5x)F?l#X5 zxU?iH1zdW57F!X@#WeQUYW9`kpOEn-M9twR_+>x1WVo@s!cuq*?1IX- zF4f<+e$Pq)D7l7u58?Tsg#M44+3p2dGq~=bUz}qtFIY+`X}V8D=T>S8>1?xG}=tGMFMS%#~s9$Wg>p=4` z%?Ysc(A)I%LPrR)M_j(Dj;g!*Rr+HKNBN(5Ncq!=JvmJu)lGpOhUs3DQw2Q1qadqd zl)Ci_@Z@>XKau&{bz}+HbC4@p&;1$_6$!W4bsj0Hy1dVL8dYJ*^RYa-^VQRpk1=ob zw3VM3CvnChV@q*28(vDA5@Z@#a~}w|xI}S0spFsLm0Q&;l;M^|UqAUJSO?uO`v%Xp zuc*IK!Dkw&&FXWafYH+fw1wYo(w>0$#I5TqSbU0k?US+ijo9^`Het%p+(cpJgU}$P zyPgC93&_j8RQhAU#U(WIYHGOb$#?vT4*K3(w>IS?VbqW=#0Mu%s7J&i>SN>?;G@C^ zy-O`0Yk9aJXoE4PEFpn+N1fN!Q7)r^y?C$9xB`<~X8US>F*HP7AhmmBaG?=F@#5LM z0O~}{G(V$@lsX-V^Bp1eB-XTUsaF~Ea?n3fM$ZDNxe%+xI6bGY(lNj()0ym^zunl_ zRuyCO#nqTK{vVsi_S9{f?@?KeCyJf*8+{roNmY3mf4<3-R{ng#@g{{h+kLKH{310k z?OIa2j*|Z<*9Jqc+&%N0x`PyzH}2pzCaHvj7a~TC^ytX(>&QBH*v0fdabs}jje*0a z;?#!ntk;=9rSy_tknDrtS4&wg)mn;O#zLOUNbs~(^(vx^%5%}W?_XHftyjGKzCl-v zD`fB%F<>{1;_LXdnEOZ}X%V^F2mz|eAvXZI2}OJ2rV@1}JDdc3Dq*jA-d~C|%_ci) zPatanbZVO4}m=UYUC@*~Q(UZ}Clm__skgzI+%~B6f zpfnKz!wkEPyt*eBIP@;J=<(9OxLvluSLPPmJD4Epm+X?Wt#r}X5&4xi0u9}r(j5r@;I}2l-cR1HB$ny>-kX#d57&z zhFDu%xQV2-)k5g7)dh^>8R~u~O2~nJn*fw(7Yd%h6SFOuz1`JzbF|iplU{zmwch1g z?e6*c9yi#V`(GWgPiuUt`|r*^n;Q@@l!XR|EaFDo$ky*Fy4x<2o;jW&tc{Jo3FeS5 zFgan7cl~u*CJo1Fohzt@ljcb5e;HT!p+ef6Kn<=wfClqi8@_VO?6_Znt?|DnlhUmy z>W#pNm9sLo`=caACEbd+DV)$htNn;~yf4wd4#S5j`V3uM%HcjH8lBP;cDcGXGqXPW zmr%U&z2KX{%jZLTB~wx+rI`Rp(*@|FkRiL{>upGC67YlUju4i#fFpDp2x4dY>yRUc>4ma`zM}a5 zxGNGe5_v-^d#i#ymHkZJv`?Y{M)iBzL#D=xNZITq$a`u{9dU8A0Pn}11?D#_yX zJcPKzej+!O%AohDn{n|$J~1pcdPD_qMG@u`{o_rLsfTxA8y;w1&v;(SepOudcOoPK z`MN2h=lx;r4Yz2sNj1)Vn;bzY7PF5(k58ESq>R{h<!;f$IQOp_mt=X^)P6)~W$% zrLYhGvAv}3{v7fX=yHd7CzMGG-b`N z;=vJmbBXIS1MX3NEC&LeBf(en0rv%rZ)HRb;dLtf#&S^Ak2fkeXE$$XJu`e@RmzFn zGCS{^YT8rtRRd{}bCo26QA(@|F*5XAuc$ptPbzlF?ZAGO8Rl4U#Sx}XzIdlwKBT7- zIS#A-k8K0BWCJy#P7=JM7WbMA5Qe{{vrWMm$E!Pqk^>Y{^zL#qmHP+k>WA#LNw8K> zc~$G)T#-~iC<8TJ&N@3zHNkQ`rXV*8mOS*%(_e$tr`oR5`?+r0($l}Un|0|$=NCHB ztvkLwm430G3aPew(oMs=@83Kgd2@)kAPhC5=42y3)*=L;27oZ3_3jNP^KtK5gdlyO zyD4|zef-3w&uhXMWRQwt{3zznqqXDrJiW^<2po!Zf%5Bx+%#TmZhvfqYsgBPCtj_z zF%I+-+OrkkSlL`N9cy1PezH6rly|dLy;wNQ*vtL^iu+i)^tp7g^yoRNvuJzcbB*O7|<&fSO+U1rQ~Vc`ZO;?juZH zAv6W~-u7AFagzh6)A!3$YSm2soB9D?OEfUhr=(@SDwE}DSG80<$q_OI&~yKJS>z zmV!;xz#Y#^%KV`%VnG*9ps+4YZFgI1eXYwRh>34t1zRYMKk>T{&ksn)EmDq{A0s5TzbGV1Jot~TaIDlfgng;} zRk|M}N0(b_m>!uEU@Z`5@!roSFTk zB~%_R&6p~m;JcpAe?@K__{wq+OaI}QtQp9--lHTG!6I*j4dB$ zUQKJHqc2df=NDzHd!APfn%atPWeo#}H_U{Oo(!RUK6dT{D z+5U*GF{nn)KJ#GE5S|o#`)!r`lw8|koMqB8YTd6_4)^RmN=rQ$+zCG6LP{pzJ*J1s zGQwqK_hW-o4dn60`kJfOk~zmxnis|xX=LUItV0U)CV*1ka|!4Pow~gq8&duexPLk= z%~!xQ?O>+>w}Iu&iu?i9_Z8?krr(Xk8|PEF;y!V;_5nt=ypF1f}KhQD7>0X(O**ib4j8KL&KHCNk! zIg&Ez?q|SosMeB7YI1EIu}PG_Hq*$c8`*i+y~%bi#qRhGL-9xV5C^Mq2XL5t_(X85 z{%FNBZXN`NM}o}z5Bp0jBCh!LV)*`g3I@2}K!Do`=v)}8;YccN;5{&i(iqk}{DgsV z@1;~?3c<$J}jwJjzmZHyAdHNhD7w&FA&+Eb)eSJ7KIB=B~Cy|V$UK^?{NeBuF z_2bH|_-Xg)Yxx(8v*Df)p08>>-NRNI&aoFmU#0XuBpSTBEaPGhFV?^)eMZU{D8*ZU zE}Hw6I=Wf^qN(nI(cK(rtyK7x(~bQW&|mMLR|4VR=C<|4DU^^+Bo)xbxS^tLOR7tp z6ak!P0yd^i!dB>Z)9d}L8@RM~zE-RhdyxV-HfE)N_YGNu4B5aW%Da8Nd zwT{K7)F*hr-v~7>{1S1488XmdeWSw4UZ|^<6bp&>-gRGTupRr4txn~oCw7{+c30z# zX!;m&@9DKmYbv`li*8+}0*kON9xkXlW%=v3kvHAhZAjr7zV+$7h3&lx@4u2STKCp_ zC#cP!saqDKnCm+gh30$LYJ6KOnzIU?Pf&Pm)ub{K1XCaO4I7c9HTA}qO?FBT4Db3S zWxcpC$;L7iI+-@w8VQU93T%?|Uro&V!pNz?%ZuXRe91~#<`H&P@W-SWeDK%!ODCa3 zz*h3y)3nj7B5Wt%Hl}!gyAhRLB1~IuC!UAMcMVm5eAd!>y3)nbqZ%PuU}TyM!b= z>zX&oDB~KT#8p`#Bb)4TZ|0SCWpmYyYuwAlbzQgL`}_L?cszK#-|utI>%7kMWi2az z#n4mzuVRE7m~pZUlDOY^5tbhI=n$5r~PsakxA@iJYjT+;`$&Q5dm@-oLCM=Ycl zBA5T#a5;LJja?oN1cyD_GxWZcv%G=%yyKtu-)kkGgsYN|pQrepwH;ka#4 zl;qV&CkbTsjmbMt6j_#@4sm+Z8c!=6Z}d(_X{^w}HEDgn7u?=@ejD7Y@Z*H#@5`XH zLr5^SliRIwTfcrLXcR<@ntd)yDlOUmW{H!l@A8Dtb99F;vyu^)Xf`ACbia=U*_abDFAc zywo`#9C53@{4cejx~gcCH}6TMtK_K17h6X|?{IHPPw$?0%@w6|q=WnwLl-9#oE6q;$;c>nOl~ zAi3#NHC$1UZelYVsgPye(X}sJnDzYIwLr2bqMKwQa{g7yZ8WzH$cFb#&*N{wwIqZh zlI86;&e8&d@qE15KL))@Q3|B}EilC1O^LbID%7FA){5bT&G#Xh5@bvVkT)jVA!WMC z9;MU%pBwkJ<)6Ia6H7M^5s^&4nV`-;$l8#@0>2dknHRz7d@Hiwkl&>Gy;fEU?D^uY zVg25(4OOmKJy`7=nW5S7HY=V}W8<(^!^mzmgV)DvKjB;Tv%J%VytMBXOPkI68Gn|a zHBT-(tAW$~WQ#LhE*N~iz*6-40iPK(+a03wb*ID2^mUNYExY(s-3XYfwDrwm5z)7A z@mqh#EfDR+1y8aZfe^2*&oryk8o@K!D{ildaj{BcvKa5x@*%bA8-as+DYtG`sZ9l+ zCJ5M$#JEaw#*BRx5o8mcDv*Bg87C1_6?G4IwPK@GfBtT%C#ojww7Y6Z?Cn->W3?w( zU0(7yw1`cu&)Pt4<^I-h@GWE$=u+!cr1_F;P@@jU)9n_*8UDf<=eL_OT#M}nea{zk zY}FbE2he++9~{dOWB`jDJcMU$oOBK9-9C%g}B z3$J;k0d9vO?|yJ0CHH=$$Zcs6wVIlCkrNi%`=y3*sZoJJx9VlSpXM$1g=XlMcul^W z=Lib<@-7mvu~-?rIiFeAc^KoBGIAO(U|Rl0y)s`Ky}M&ChewOjvK#~LF$8z z)tba!Rpv3p(?$LvS+nHqIXKGk{(JiPZkenFqT8({QYZ`N`TA85n~oj0F84w}{8N`X zlz%pw9S8h=$5aRx2uN=KU)t6)50d5yA`o<8ufp)%67*o(Idc2;Z z#`NhgvrquLem8C*WWd{be!!#r84u49(v2xd~rLC`J-v=8w zVRAN^#RDtnpb3E1t3HG6>jce&%;(-Xr=jy99KNq`k)J-yRw+>K!oU7>3eLsG7IPwv zVK%&E%AM42*5_JwaXKW>iu=64a|8X+>Gj{CF?-pqzMfCuIm??l(aB>{>vq;QDWm)L zYJ)2=C2z-(9`>*bD<@u)6!~ZM6~E186|%+E#*R`7ruTy*9Xg;ElfjWL$|1myD|mE=B7el;0>c9&KKS4 zPyb8txqrIA#zyAjV+18_Pcre(n0$GJ9@jo_i`nA6hQ*7oXgkP0@(x@u~-I)q|_vCK=i%k=!q(6`D zNoBmab}mei?N4j?`*1WrzNVVxh>wgB#Ogjui9JlBxRou8 zu2jC}WPJkEyTqHG9bFW!Drdtwp1g3Qw#3-oT}Sk1${T$dqnW%X-z$c?M!UK}^PY!8 zr|Qt!m-I~yiG zJnU#jO5E5N$<_xg(&Uq774ZIQ2RN)6`V-jA7Y>0FZI&tGBlctg>~=EIRC{qvNNW}v z6-o5VdS(y3yb)@46W%-Z^Xo@rO!eQUj3io+*EyfLP6S(wNUFu7i4dJ>NW0dXB^BaA z`8d&LV4+!jjh%h;o2;P1n>99JUZMX)M@VwnE8buy2~-XfNF&oy>fyi&DMSF?I$!{U zGl6^8oS4^$cO?Jg(iR+3{w<0>m(>vNH2>yJT}PhvqU|U}4v>RZre-FFjZQyxvXo5T zL|nZMz)VHFIpgV9Kbsag88vXeR?qt^NBak zZmu%faG;ARZ*AJF@oiF|$ z^ZQ37x5^B;m@O*S@{ZiBvm9$ahukoekwv0+RcYL1Yt65~zH9!mOI$>BaFl=mz}n49PWwZcoxe3Z>bWSLLO6dLBrz811#c`qN zq59p2>IU{wQjz$C^($g6PtK)WUVP!#+WliY_9d)l5jyLzrW>p5|FZeeemAMX=_c+0 ziM>*#xUFitAUFH`zHXpz0P2q|Iz!s$M;2G(5`WQRr>YsnthjsQs;8KqV6(HLyeXgN zUf(Q3Lm-pMtaLFc_&O3d(}zpkABZffHK{DxItR_xPO0TRA91CUOga}+BnjAW16^rMLKY( zY3^Y|g-Ut?iYzfE>USyX;Wb{f@0~gtIIk7P9!8PUKms-)I@9p==jMh4uN}W9Z8;nq%hAAWh1SpgLHasM!-Q4AO#{*^f4&-vE)rxwF4b9dvcY>X5=x3`u7W=FcPm|3 zHu5pr;$QOkrk&>--|W19hxKwW+y51?d>L)O{xD?C z_qkZ6Lj@%OAxh?_NypmVr%*KY^fT*3 zs3G8zTlyd?=EO2%>1h^p!}j-#pQ~EtZ=O-1?QI^r&QIVWfvv=yx>b=-xL zyIgBGCJ|7^YToAp^OUN<$(5UzY3I1TDLwWuXUTjOQ*NMNVfN;CxtQdHapWD)LCxPY zWJ64p#t?i>4fZQ}gp!PMzSE;q#nf**V&ajuYLvyzXIYj|;269)l@^p5mqI#lpElBz zH4;>pNjgM+ARco@%bsjsH|af1zthd75$k`3g}FU5G{g}Z5pn?VV3?rT zgR*saSxzIBMz?`t3z~1J9O6KK#|6_A*uwwkVy}(>8L=C?6G#KX@fAbqXu;QIi;9Xj zQGbWIxIF?sWyHCZpW_CvyNSTKu#9COgwGy_sh@mwg52x-TA&#X&l3$om$s`b%=dHb znwpS70zkG+c&+7g1>^Qtfp9EP zqc_$8=Fi*x{kS^f$Gusp^*g&utZKw21QH&28*|!@!K&dvCYln7xEKH|8oK;rF7ht;9|O9v6GBLd zjyOR3xYLE-u6jQKTI+{#zfrnbe3;HqdglsbcR2DRI;GlOgc9|%doU2w;Km%qz zXdv)F38n}{QDZ()y@30{24{E%zVJ$~!&CV|A0B3t5+Bv>b0!u)zKb!ZRHg?gGBc!W zTvk{ejttMd)W3dNm&>pR*9rWd@*g54k^cR7|1H+Q28Ixa#|~;6zTwzT#qgTT$sBui zu|G8T_iEQ&;*bud4Bo;8aVlXRvc_R|okOzvu{qSGRtu2pt4G7(d#N(mkF0)kXt z1s;AVD7gmd%0g-Yl12w|26kw*Mihge z1ZL)Ipf_dVq%n;+%%|O-%3m+Z8G{Zu>Iqo7<{EckE#Pc8;5)*_Z2*M0$AFOzHSDh~ zS7#slk3qOrFycPw;6i)c+WQmfHqN;$|BgGC*A|Y&h8kmym+Xw^V|>2@nMVql-m^#f zh_clKJVUe+W{*_!=9j7l$56ZO7b>Tgx5%U#(AmY2OR4~0K@Fk0FkqVw$HtsSA{}M@ z04czrjWD^bbij{0_4M~QQ7cQX{Pd%(RlJOP+#;F}2Wc(i9#yM>JvEi+(Wf!_>zc0_ zh#IH5Q&h50qM6BX(@Da-*WNL_+o@BhH2%&=-kSbmM3>>1`$8kIU&$zj?6(I5l2}OCuZic@lIFciyOhNUD=B(54hxBL4vx zZqj%l3+o|ZS!daGeb|ww(Hel4n=meerEb6pbY|PRUoREB{n!KGfxIH3@G$HoY2!`0 zJs|dC8bC*Xv|EQq^a+XXDLf1uuE9H3Te!pAr?H^PF_10dhAlWJQK%<7igsxk5m{nvN#BKYT?xG7=PK!hVe zDE5M{TFv?5?b?LYPoxpH%4@UvqK{(&+`MH0I0>hf#>8j>ZA?pvIeGJ>Sq_ zlMmV!`|;xk#I0Ekui5pZ0>5fp#&q&*m&KIU)~)nX_b7=PcpNs?)|IvTwaBRU;dHJA zbelJ4>qGdBkojki@1Jd}t4&dpdC8Z~%y8L%o&Jx(YM-^5K;9_Yr_nH;KKXkJG-@C^ zCh{c1ATEF91Tf_%?H=2_=6I9$+Vq(5*NQtSNYxa+h=6XSktuY^XXo5bZersmF(1@u zSJOIyS5LXhTc)XbF#MFDi;eD^0K0!`m#achpQlrCY+p^CHG^h@pvvW}Xg~Bf23(5g z@*XN$(+=zrw3Y+qF!b>EX0Lwu7OP+=n%P@-)+i~B+bLn3!SBNJXvvc(sc$%q(G|vz zCwDsUMrL7`wP;T&bz?f60Kc})d3p>Ky9xWV8n-N*Pd%YNe^xvKjUA^$YM>v{O#8yX z%7UeC+>I`7^FT0;p3EVlHE|iXsezP8C6;17&iDaNli}j)fm!*xXu*`MvD<)k9s5y; zqi+EHN;$3TInh&nlG1UO@ z;5UE3Zq#Q%X>2*;uu!nH$#t$<2g`0S%$Iqru-axOblYtO} z0!BFYfJzo;(Ps<4md=Rg_b+9}2q|O{2JF&(J?As_n<9@i@1_U?uy1qDiZ5#7Oro3t z_pYY_ClLYn)|*Gi@iU((VgAZyLm>|FN;i$Hd_UbVdQ;uEn;Dp?sN1RD4XJ{Z^2|3I zL*)J&aT5`_PC^Ee@kBn5c7#CqPT&;2tIX&K%t0KDfKmMYlnR{JaeN?;c#}xn(K|sP zYhXsAZ*{to{Z3?2+~n3bce?400GqxPL+c`GDhA4;73|>k8Y!B(=d`^ZjB|}q+ zuLgk7gkA^#5gHlI%4il0;aBJ19fL@d89#Jaq@>BK3({tt+u7J7;V-!V>JxXC~5YSS(eF)x<*v6!E6)Rbmu=-zQzCX{drcfuI05T9Q> z=wV#0y?&s+8TjJ4*TvnmcR#iw+~&)$DL`mMUJXL_1&AcqG>AWq>Y#caMZ=NunqFvh zu3Jfbbx=z9q$ktlQMB3^OsG~~k71dV#-6Mo7(>Tun$nsa0Y`!+VMs(U<)uFOa(K_m z0mRgQgk`5_`U%N0xybaYb>Qgxyr+hGo4)@TqADs@ZP@Oa2ekmz=V?vs_6z>553x&p z7&?XmGDE)gnwcZhJG77J-{*fH3CCQ$je(dvk8n%N$EN@;Y31+ixO9bOA)pwMM}s;Xxj3t+mOQu1pTsi6#hip?;Wtd12sbnfg3ON^S&~t(I*8unJ45?^^V{Zt+MhH zusdC(_2^G^D-+*38CMoGh$djhZ5X0-LrQZeGiR1;x0oCB1$1>Xe1llNS5#Jfe`W3R zDmL>%Kp-=z023({g@+JIwqT%5wE8BTv~-D4^W6S?VP7n=^#A~fj%j*ll48KAU|gY! z>jpZfb74KG5bF52-U7wzzHaBhw%6_iwzb zyS!%pJ?4*%AG0Xw-U%dk5$N-tyMMtmHVXz{KcoZe>?*7EEM$wiaQ@*o#q;<~{t>>1 zcx8b0p{w21=5{4GT7VLUb9QLuh925uw3faNDbu@k&>^&`PF;1a=LG(?5mVnxun$%(azgr?25^aTa%_vd>d1h1_r_S z+sd7{zpFNWSKbXPMH86-e>P`KkCxDBCghp_r6?zg?n;ML5BwbDX%|PwK~DUt@2z=V zVpqJ@ZJ5e6O;uEc@cZJ89O6cs46>tmff6<_WBm>7FSJt?y*4PlopX(uI~t%pAx>N7 zSE1YIafsPrR76+q$}-|Gi-K8g2+O_Z8@!whVA2f<8X@mOZHuzd!e=MfGgm(Z8Ah)d z^9;>FAdiB?$w0cy`M}eh>!+NrgRuAzads6o(pUuQh>jUoBY0JabybzP59|Q`! zSGr(2Q?ocC%4LrOlE|3J!E_=Q^FOc6q~l$NW-2>74T#)79kgJMHkMJsqjr zayEPCw)Zuf<(*HAT}r=;Ld&zC0X2yOD+E)Hq#}FSu{#phWs)H`r*XIMtjDO^zx`re zspAENGHE1dWt_!MBay8j$zmf-_re-K?{JnjXXG^N>dWHxM7p9DEJ4EwonCIM;`B ziqWHiR!>?D3jxIcIQq~tmL~m16m~Pqka*frxjD)x*0G%A*O;m&dvdIF3XE|*BfxI< zPEDU_Jd*V^vHeW7L8mljn7gK*BV}T4hzDmxG5fe#Cl?>35V&3oL#NT)N*17t=&qor zbmsQ@*4JMTre$bLfQg~YwH)q;m{;l%X2b>$?rO2q)NScfQNAsE#XMnJEX3bi7y5eY zO;lV;dQHze$#4_1*BDa3`r)^%5{aj{ zgyQK1XT;I8$WTtRzVhM@{4t2=x4d-^?g7jrGxIpPRAuX0O3#VqC2=&hZrR}-5F;F= z(A4yv&I5DmuejA5StVuGN$M;)b9pFtN!m&AQ0Z3k1xz!5h62^io_+<4poLuxrhPJU zrYG=}hUJTfB=J?U_m!M23J!27;f#4u-4fExTGyR!5qifgavHIIZt6BJF-sG7(BJAC zzcm7*<@VO4t@8I%O$whcT2h2m*jH(jm#x)`*#QDyfqsMz__ z(4c2D*quAn{vU%i2YZw@5j_B6f{Cw%#of7hV9Fe&Lxd)Py;rMD6ifUY;vlf%Ut?c-{GUvW&r-T{IZG1*kiSdW9>XJbV8@42VZFt2CCj3@k`9Z*zNU-f!T~-w@6f?+zQxHeKQQ+(8&D1UIJ{1G zi*#a3v5Mk7xgRA-?CMVy=FUBlJhEuc86FT8$n)WCBNnDKlz)vfUHwqkW3R95YdC1ya&s$2u3$)o51!ihXA1;;tcY%MB3N@13Z= z>b$9YpyuDsRIoFZYjK|LKdwXl!&#v zJ)bDedQHE6A(uYfri`&AIf~7trGpGI9lKW#`4WBYtkxR7lb8`#! zQ`NRYb+`2G3}u~;wuqEnC*G&*9%3otMEoK06iF9{LDo2W5zI8bDH$ygW!ao4Xg`xJ zv{dt%GPc}jACHQKuckg$5U&6DY`bFqmrnDX*mml|w=93r%=tlSxzk@O%agfjbw<`s zeMm7^iNIYBAYYFtr}%ZlRW0$nc9ouaP?f{4cHuyS?7MWrHIoF{qUYI;Lr`YIqmj)a zg93Q8{%wg40l#6(hPPqX-cR6#94OFS;bHvg$6&}=iZ>2|0wsaC$Z`oYy!QStx7yvR z7dHF!-|RiwUv$K%QmtDn+g+tmT{R2O^42!S@0ZCIOS|atqN<9lS=M8RJoAxyOzQZL zN5GwRb&yHwXk(?GQ$f}CoH-6J_glxd<+^LLf;7V!zVr)c&}KdtEm_pWOqhGdU_S^b zCPBR5-kF+1F3F)f$7I>Qm6k~9?)BrK5C!F0J3r0@Mpphc{K1=PZZ>6!pYaCM&rC}6 zb->f&5@WtY=AE`bic79mP2b*_)>L+K0(iQuo6eW8Ay5{Afa>cg)rx1%AQErl9VsFI zKI&m=xXOphzj4Vrd>HCN$j{WuaSpN4*g?y%-LdX@B#a zX6j+(>Zzf_2eeJ+jpROR!4&7BmkhjgcH_!skqL6f;mgBJN1oKns%uMkNS#)zkPCSF zZOg#`yK3J|*IJmgsH8y-FaPWCG`Cm1=DnxUt0cZRFc0Vzmi<>=qlUkR^n)7j>~Yur zV{rKLrB(l7rY<6^0kKlL>un!Xg|Oc@1_NhETY&CKm57;4BTX4@Y&+% z10_&YbTC|mE3+S^uBnuXZ~ha0N9S>r+Ji@Dg8fwuQ08tDzqjvIScqKuE-oJE7xaUh zu1KjQ=a6g$TCMv$e{Iz*Bor5lv%4cF8FSQ}W#tFHOy!6uWd2Sm#8%pr3A`Rl1FKpUBoQ%#jYq21&OuKj799>J3YlIi& zT8G}Q=a8;@`O)3IpsEL)*?Q+Xaa|(o@Ryo6LIwsonhD&ccycf1Jb`T$%J=+f^^7ZhA7M>PemtzJFDo(k|n}Bl%X!l`v5t&`@?2 zr)KF`ZwwE2KCJJ`gS>>i?qUZDn8O+*D=}bdp z&Xo>SMwQpzoVPtU^)q-b`gc_~^K}o?jd?nA*U3}FocF35ObV6v8AB>tbxO@CT(fD( zKEIsOE(d^`oi)-RU7C|y0yb}kb`%I117GxRCOg$XSc9)rFMm6a8Q4vP62~EITVh=R z%C}OdAWFC7mwiG93ELN`l5@B-q2_u?2A>2LaBrV!kUxVwGS0I9>1Oz$oD6#mFif5- zr!2`)xJaHo%e>%A!DTkY>9s-4qfoT;F_sPalaL0Fb8j0T z0qMkTkCgJOI8_WAzQ}s|0ssghDS=L_~%wYLfKeSC4ONhRey7iBtlY?zX z!|Gd4kJ7>J`*rn0a0->W@}!N2QAmkQpaevBu^gYQAW*xkQ7#m-70herGq3~T+N#pX z`@~gwUao=ApJ&_X#A+SSoilGc-pIG3JZf-h;QTApb27cb!#FU$Y&% z{f_|u#0srGuJm!co_jVDd;TdM&IlL z!B;8^8-1W0U`Edq2+YEa6=(WJ1p!IE)s+64%#j#4D%P>4_cQycUzAhO)ww%uFYU-5 z{4amIqShF8Dn$82N_;@E`QOmA%n5dRTua2pDN8K|S+&^Q3Ny6r`uWu-<1jhZ(6S@a zNy)Hj;nMW!VgqwdU?ENf$1zZNHOh-ph=U}@r~o2}4`tXU*F1CFV9()cp5=9ize~d3 zo~WzX3uj$wDr9s4uQ7Fe2tMMv3q;THf+b4OU`I->+UG*{fC2;C@)JEeLFfZ;2p}lp zuWQP__O0dJubLnZgJMU8OErJw0K~}a5DMfK_LBR-di~DrG8e=Ia zC7i2kF!G|@h_GW@$7#w#7Cj2RqG6N+@LwQ`VPW?t*Cv%U8I8XEBu8sa`Mex9p7dR- zuWL$T*Z%LE!bkC3pZZK&{2GFC3%gYT$OSR1^RUT*3}ZKv$XZ8JVbvxP!@!%zlwf_U zg@{QIatAC8X{ZI<3+lRg`Mr9_F&}bVgjOM+T z7He)#^eKcPc_L)e$Q9 zt$RGe35&7{{KVvIbw}0OIx0PD`~-287D$}$*{TlD6%3SRl&dHof<;vqm{xi6O;rsG z$~q*5C|DTJ$+oYWyz-C8{#byS+U2Jd831Zc$f&pVG*1{4cxvHxeGc zS}+Y14Mg+5`<&y+lrL-hVtM#n-C(51lH*0;fnssdp}wr^c1$F{emSt_5cDQiw|erB2aR=s(vTsx@T?8{_{iDI_?)Q1!|mH_=Bi?>yL z#UHXl^_vhtcB02_Y$fSvpbdqHtigQriV?1@>zWd4XfXUR+~3*K5-YQfFAS;5l4uT9 z9Q6(QzEgZDF$40r6GR_|oR7IS|1hi=W`ePt@qMf)`@JTsYV+orvKn%6xBr`M({DEG zURJ#$w&N(9(XMY{eNGmuOfMT{!usvq94JNTAbV#=FRbfI+eGkPwRHi_)OFY`DZF>( z@JZ4|eVK>rq4gCQ#)@b(Q?gi#l+R2Cs`_?Da1$_qzG{&e;?F4t7{ zswAOOATwVo$XGwWqZ z;vFAS68%ekWiDiXsN$%sgE4Su6-jrOnV*Y8D2Z%;T9pcM_FtD&G;uX4(7z4=QY%d& zSZFqxUl;q|P7pCC z_p_I^3UT)D_`_0r#4W|OrJ*Iho3g*d>f1hsJyDk)F;P4pV;|E4y2#$OW_pEY&}sb! zd#^c~Q9EPRhNFDxvwp>bZr2&-v0lT-r|UY$sG>0bxyMq_inDb8OX`z1U&~HDTjVdk zrE*E)>5#ASaN`5RgcEekMV$CHJ)P#b?b$>G}Y7$Hzi8p|8}@$>94hfY8fF=-zOLfuH78|0O7vPk)N9G@U~ua}SYP zwj-7c(Q_2oO69G| zk3DN8#gFOp$RqCEN-u=3;5&7hrp{oG7dLkfqJPmF2XrJvGo3Q)wwtKHB|^QxaT8iy z9HhpSCNIiZ3YUvXRQvk%Xgj44PivzKHd+hLr;$8GF8zEBR(h8Ekcw(hv{;KG9QwdKAPv`ByyQO*4cNU`$TOz8o zpkd^%aM41dIf5b{^}pk-H>(K0m-~=%#uN63_ z=J8S+QHRkT1{nZ`u#6QnuW=mR{|NX3Cg|?-l>-9I~f*v%1WAsiI~% zR)-(B>psxU)BEo+Q>#_lnqFK6>qvzGTB#J9eYNgud^X<~eqgUie+{e) zL?d&d2x&7j24c{A0+%s{9_;I+Mk*jC#GB=f8Iu|NcL6;BCg zNQZ%inQF$7S0`1&U1WKGi;{taId#1Fi!&=P&InQv2_J-QAG2T37q1!OU~tJuVYr7! znw*d3U**55d=Hn&p|$~>aFB)j^0|F#@dtil15+u_el2IKRCSpghSmGc*&PA$3aB0& zEvO}H89rwaY7@~kL)dvnwZ~2`9Hw&JUn9 zhH-91=|t45S&Rf)DWq{()aQI()S=FooSdHiq`Ttkjj+5QEK_aF4Xo_f1AU*jK7_~5 z`%gXzG8?hDt-lh4ybz8GUjfoz#*{XoCChbT-7xa7gXx~dgPEfE+1*v^i+g%q8bcalShY=OMA zw_(>rwphjAhA_Z?_b)OqFckj%Gu)$M(=@*5K;UfWy`A;o=YNbkA^~6D#6$fCOtZD) z8O}4ZC_pg~y`4Lw&yAYpR@<8jqQt;^@%AlSy^@ctCR8A35N1~_OpC?d(R^k z^(aTNAfgIYDv(VhONeIkGu7e%;|)qporx(9dq?#gV~R@&!j?3DYV!RX3Cm8_N2r$HBUx|v|+KplH>FA zXX~FnRVA5Cd0zfeLj8j*3% zP9bpBSf^ls;h-;f6{_5PuIJ|6Ckr|}GDD9pGWxB&+`1^jU=6zB{|^2`aisY)^zF(% zW^se+_7Q!RshnUikaq7lup6*rv1^3f$yx(nVzd?Y6bM z{-Ch-u1jAVOqLRnIX@UDn-tR8V|0l}TfG56`Dd^Q!Wf4ML>gOO(-#S+vM#K^Cma5& z=76Ygk10lz^2~@p#bmN>(OULM1pi~`?j9thgo+DJ{ts+-|9?T62kc5@#K8+p4g9VL<1&v;Xs{_Hg-Npe6{M+ScrEP_MH7d3R&%#gk})d zRI(H$87*<8!=7JzS|c*4qAN5~O)|V)pfzQv%lCA=JRjY6+3LTj?@d3wV_Xmp=flBi z>O$W`wCH7w*r`|RE96bxQY9n+>~GT1@GKMoan`{9azA4dx#<|SkVknYeR&ryvK@~jDPB5lm-eEn#i{QT;N8(UIyOugUbsH{#A`@X!U|Lw;W?wLIGkGFmxPoMqn_>zMPRy%e4 z$AD}dklI-G*bi;~)5OuY11v@mx)UuE4GV(*7(Uv?K>q&Zz!K2ak~>U}?nu2IMUCgW zKm|%PAYCEJJ(}#P74UeQ>@xZ|ZE~#U=A1&a9lv(%`JdcL=9Zk=nF=N#?vS(L6VeIn zCbHrf!C(ctr>6Yfyol{(`uW_0StuMyc+&hcq&aI}vz~=XJ0J)Hula~8@5Xh(c__8I zbHR-N7>o|UxKjcrhq$O`M)wB7z=C9O!Y5#iR71($I?(z?4VoA4l$aR@gv&8GF+%F? zza?%-a|p=x*?$Z&H{jsXN&W_>5C3rrH4APtuw$UD2hF)~t@Kuov6ssp4cfQwgRDEUQXR78C?xW(qV^^JOPA^o43sv0! zomd_nYO-Ghk3$GldWT=Q-wXI!(wu;11x%3%VI|#AiKoEZ-`~yF; z83QAXIGy>ycrGnmxvA@z4w3D&CL4Ot!w7`(Z5JM)1ZKP@!dVkgdh$>5(me$MV~SSx zTG1NvQwpHl{)%U$$CRSryI2Me;`&7Mz}?jpFP=hq3@vJu*6)HB?jsLCAOr_^<{m5c z6f-J?QImguZTl9bJvQ7WFN1l9i6|k42Yi#5lF$ z-)}Azbe{NacUBKq7wER_9(&V0%Xb!M_m`_Vx|*>yMgn~4_XIt`xC5FdWheTrOASbF z@*|G8F-~=%K7w_Fi9yTah)2PL~^F7s1FfzN72Fqbtqf5?;ebDYhhN zKm`j_ES5nez=^bC+8FtciH$=YqZtvP8J$E}?tnoDt`C0o^86y;QwXI{{r5K&#-1K5 z`<@*BIu4FtnfWE9l@~5IybC7jsISDOM692|;O7s^9&Oxi2xP(9!}pd)a@hT!<@wyVII~x{;V_ zR@1V{eV+4z(Qsh^q)&h(X94nT>@WrgVDuv4x4wOFKQ z)#bLTKe`tl0>^|oUQ={+8uOp}w^=zN*8}dZ$Fv^(jgBVY`FPE;oxXD*bTIcJvV#o!P)Ng=aFF;T%kX(gwgqhHi0XuV|;0pbBKQY^8Vil z%U20ZFCelp$g-(0%&M{9L07JelcpRTl1o!9=U`yy2i!&wJn$@0KaZdB^pDHG&wRv} zs)Pu*OGQraeV5gBj6eorHZKG&FLjpGi_Y142a2)@j76qW*eq4UAwS+x}&S04$w~y!oe!H7p zH&?A#_k@{RdNwGL2fMMGeqPs8ZH!T{Dd{@h#u4bM-P5gZPkugt2)!S>F)99$U>{-O zW;vPY-~0>lIOgY-|Jlu$0?BffPBySa8HX{~jcMfvRR=mlaDu6!7P0+2ods;hnC7T_ zt}!MPKIE_i;o9+LSC#StK7pwWf}h{t(s(YRz2l0u7CgzqLdsT{?g(7A%||NiQIU`u zXUU-z?y>OeWN>~8E=~QAaBOb>t7~*4+P4h1TnpW8+@9K?-TDwx>DtWq=5JO${zzIg z2pNe#sIe0ldQD~7L$IpSOl5L4AGfM)(@PL!x)tH76p-{1N>g2a)U{kPeb|vpQzVQ( z!DSG}0@Tno&Wp@jL6rFJ1ALc1mNZCHLdH6?!_apTqNn!=vAcy+7JSdux`BhuaXgkp zpggMjU78o;>>LMlLm0R;{dhM5Y?j11m3Vqo*+XC$F1@WSUnBTx`?+Etxm=WB zpell>_X$tVQ7G5{=J}OSRZ29s&8?(qc zmy|@UH`-?rVn|8 zM+dwsvr*rr$IP~Vs2&>K20k{KR<6koMQdRUd+rmuO}ys~(6 z=u9X6(y2FDp7b(?6NXKnMn86v6cr;uNjIM7u&ZQSs-6t`72M=U7#$B^Az0f7M3Yi4)e_tqp`ir(w2 zJl&IP;EhRzo)`K4E~s?b$=<8$Dp<WYsGoSK?Bsd_&0MpP=e|j zeqi~0)D?;wZaKN@N=Q;Lh%ri)So$3Yx$3R7QkC|4^;89C(UqyzcLBM&y^XwUXuGfZ zd$PydC)3ebp!ryXKKOqWoqIgf-yg@7irkiv+gL>jA@{qb3rWa5_lk0hx#WIX<(4qz zS}t31nfu6HnER64FAHHdwcIz?VcYlj`TgUsZIA8YbIy66_xtsFzM%EC$#A!kS#839 zEE`t{k`eh4OD;*k!FtZ5D5+_JNQEZIU(S6%4T<%IeYmRD*db4;E~xNOc03e>xH{~0 z7>7AeYm97w===vv&M{2%BDO9rVSR%DiCK`KT`BNhkeg`0ylZMjrPOcnLoU!ldII2{ zw2Q1PgXHIBwzEfxtU zsMG2SKbx^Ch3^Lc8D8v9<1L3Tyn3wn%Gg@K5q=P|2&eA6RQSlsk51PKhfp>foNRBy4>)f@>cT z5Ao8C{i6#1r43KumK08V)|6xuuxC5hjvG^ZIz(zGD&_wmG^T-Yj(31M_n956 zONe)=Np`6vugjJI6v-nAPpl}^Q#(o0^y-OT|2h5 zs>!$T23-h6_3m$FAmmW}7&>nZ5W_GB+b7e4mR!zxy39h@I{0<5{h(wyf3{p8tM@+^ z&Q&#Z50bN0UZ)JZq(OD{)H2zN(Haa~@`$wbhqY8nax(L@a<7eTcBhnQ%~_pz#qaZw zg_RY-!YV$0lhT1=Uj0MY{NQIeHW(wObH?QTvld_1UX2G=j12O1uAYg#L03()G0$!D z?9QljG?7_sBgb36wMYlT`a%Ie1_A<#`Fk8MI&3UMZU=a6dZ>32fv#Jv}L%UonBwD?C24K|jgb&}_Zvl&4YVtSMGS=Ue7 z{6k${lpmW<5zm>x$=$A9!e8tlh!)hCWQND&KxI}Nw$N~zFKYP{JsfD+jiBmUny3ov zd&iId?aNEx>lrQtNH1qI>C&0vBC*>zDA(pD`0=Oe-MLipmFJ#3_dUaXT5rsjM(Y63 zR9~p4I!)m?3fj%>YJLHEj!~+^8%C(*|0=YR&@QunA~tqhZ^Ni`TGZW z=Ea)V`cGS!l~6*3OP%9lgW0;^@ol>5_%5k5w8@wfiQ;35-v>%+c1C9Ao-htux>D zQv->dy2_T6MpvhiGuZ2Q&e5P`LrM%0@)i&_KA`zile#8^B26eG{T(1$%2Laz6yYe_ z?(hW^5y|aVG#tetLh^l4epyPg$EI~$+r&7>N+ zM-uJGorCQy0gnaZ)36qgVmcn6qu;ko?|ck$&JTCph9GrQ{9HJgmqSB{i#-YnD1N%c z%O<1{EtP=cq^79K?&%Zj@yyev>KWz7cUDUKG&Suc=RX|k6le@v{eCtg ztf6sbD^SYUA*3TqG15+Rdp#p4qU2^l2;av6meap`(-dE)BLio#xmcPshAzm~jXF8! z!a!l Z!DvHi;t`GWn}3r{YDlV5l6I+m&(o5sCQnxStkKED5Ze!9pC>F4mO=J~f6$2g@}Wk@ zvKhLOZtCu?DL~={BxU(Q)GzWuL^{A3Opaj6W1x4WvU9lVEK!|3Aqb$)75)(sWaoao`aBd-Jv1OYkCkB(j_8cB%xf> zNZCrzad=YTSyRWyOf6p7xA~!Q?>$(3^%rKAd#Qx;ZJ=X$DyRQd*@PR)2#C~(ALz97 zU&X>rtMctir$~OvBclLJxu$K!+cFdM+n%Lo;oigjPd$f=3Qcxysr~U~?j8E#4_o6wwE)7kQeaOh8!zeM`h*>k72`f$n zi_nwx3~%_;md%u#Q0;kEM6>OW7BUAb884YA-<{aSurK^lK&izMWkoCU?`G6gZRH``n(BL3j&xtQ9>1Zll z6R9qs3UudqaXMxF1ZbC5)tC*@AWoXmee* zYw%*HXUpSz`C5NYi8RGW-u4970GM8yOYdx0y6N-_bQlwxBD+h4$j*p z6T*~hMlL=fNrI1G;&hLnc06Syz+bo|z#GY(aIVN_6#h3qHdjnPkWg%n^M-*HG)|li z@2#K_&eh_R!Zw0P(Ro43?SdqSQ3aLur|cx-2`=cv(AS_@IdwmsPl*I%2o8^RULXWx zs1rH^%6j0TI&i9H7k+TZ5hLhw8qxLCv)Q(X=(i`PHHkhOoZ)i)%Wo+`;ckoM43wkO zc-riJYFdi~q;9Z-6*ygN7*6wzIV`mE#PzmI>7=nGmDXC3OX>4`;n* zO%`w$X5;ePs=#lnM42rF?7J3J9N0Z}_@8Oji(FxuQ29%Pk2h;SIsR=Svm2GRJ?AhX z-U#qj_+%PeZh*X80SDpQAh9HH4DXu?AxqrD*otQ~wD(wVzn1g>e6W1rnza*O@_4`- zX!Z#0s_jOiU?=P?ZpjR>2dj&eq+!bJyR$>;1nMY;z0x+?aH%$VQln?(cz*Qv7&p~Z`|F;at}4kt6+CSorq*<$Cun)DkN>%GZ*z`c(eD9G zcUMLqkvx_FB6h&CsN_@b!p>H8bSx<4XO5of{6yYDLwL+eyPhB;%uIX?U? zetzhP7QI$Fw^zsHC_6ThdPg@xM-PefPM*qv#K>3DZ&U9RhaZov>M45Ikb0PWnIw%Y z2$$V(P9yrPdt$>HLrdyT+h~#bP7|FEyKe@qH|+mr#v7Vyy2BKtOSeq4-6f`K-S7c6 zF^I~@5{fDIh{)48?ulo08I) z9htRN7K$Tck}H=`)>O7+)zHUL-qvIEE2nm5y2RRQap-?|=ZjeE_HG2X-gFfAg9jt) zWJk{44zWYvIj`L(SObc^%DgoX2*piO1j z6Y{lTRd=?xNzj6kw-A1&82t)`j+6u#x$~S|M*?489NW~vPoq#W296GPx5yiU_~g%r zYHH?YL5hb@66aW$59lv|)1tO=eEuJlB~s-|%7dCz2yJ-U!{<9=IXXIF$y`#f?j*+m zEU4P?QP>N$p)bR6iF6O@VhX@HQ|>(~tiL!&v9Dj|OP5VKWyZ~`C(ASw zd>veSSao-3vwy7EJTlZ!tfd*hB1>|4C!9eu?vfYA{SmT9H6zqd-+fw__+HFl4bam6d|D@ANR z_ztD{?9ORFO6-#Pc@|R;%^ls35@o7!niv{WCOa-r^1D(}liHqukDg`hZ#DGJntrrA zc6nr*{7LTbn`tq50==pX_ug<7+NJQThmg>P`RZj{XhgzZn2pVhv?i&%VN_MSUh17S zh%I9z7JXd)J^Db-SM}Nn+DTfIA$I~o4u9l-*Ze%JZi3oUptJ&m> z8L3Orh6$aIOK~#~f7U*-4-J2a{$kPjEJO3jsg7%Ad@7hAOZNFs6P@szl`uY%L@!f^ zYO1Z=Peg-FB`y#8Hz;aU-uW{q1;*?49^X&n!T003vEQ#D}V18VtB@%@*HJkjNgzaQ(<2lug3 z;@ksvboB5JXpMT*>ReuLSkW#O&JW#5z-Q}jDdd5O~x@Xa`n{yXBu22r%s@SyTbHs?%DOJj3OZL4AY_H>w!yu_2nd%hdR9#>DD6Lyx) zx*3=(G|+Dd{nf$hFRqQCX(u&@Kz~v-Kte+l}Z}CqS9j+T7+T;>2MJ70glb~#7B~!(A#aBE?3zluYRKi0T1g;Y4p&vQj*z_ zJ^6U4JM1qgvDqadG)bYf{IT-S^y@=4K@z@pOMzTsU?<`JX~(Z|j|S|24B7W5;6RB0 z8B|XQ=*4V*%-O`5d8kx)Ce8#^xbV6ccivk18Q?s0^5+j_u(MlHoWT?N-kHgu4a?X5 zWvfTS1-Prm`Nr0hn?fH@9|r=%BGe_fw+A~<;pd^0huC+Ev(Z2Tr?BS^tNYR~!2Y;5 zl`@rOVzDQgWZal(9wR&ZNOx$W@1hLJye=c~d=3Hr1Qn0QEec$siWhiEjkdA!i?riD zo_OaIur(ZWH?~6heAGw7u+sdL4$fR-K^-j)<~Isft|v5X2?4{|C7{>ec)_S_?iwWWNrgR8RPXPZez}blFH0O zPm7f0spZW-!E>798k-R)vz_$+x2?}w7_y%fwr|-;Bb_ZEDezOzrn$~T&_neu7z){!;jTMQ+)OKJ!X?z&HAy4T31FR z;ECaVao>$m2^|-(O#w}MC&zu4Lg|*3bJ`BH9?RGD5yCD#7t|+c>3gYX=n!J6Nb?|P z_ixqs(i&=pEcsLKzv0m9>9Wa_-mZ##zKZ!kJrb%Tljrrc_Cl z-_rdi^&4O8?Hayqc}ulA2tg?3i!|v|s0PDcZnLG-ZXXMx!pvfK&d!K<0dLxTha4@{ zEY~aa3zY{a&OJ`HSl}8b-#PY%_nDX8g2}5?_(%|{PVPMm9lpWCF8qC2de{gIKB=qa zj{n0rzpDOdIjMj{5y9`Dd~F1)!=gbBib#lefBxv>d7cw&X#sv_k}oCY4bB2wk7WFD zT#vXgpn%tr0IXVEOBV!LvmYjV+m;sY<@E?(GhEY**ZT6%S}`;yaX8@qjo2_x^EfS) zB~xe@Qguo3a2P6>*n2-nlpLqgAaDPYxWVCP8(I5ie9&f5B^TyWTF*Ip=f07Uge3T! zpK>1Z<_4l&5!tb_G;h^c0~5OVn2hXU+4eh2X4Me>?se#W2Ybyj@coU#mZ$#1r1$q& zIZWAS4d+*!>x$OS+&B~9$0F4jT(eBlWX%iWj7j5;d>)b=Vfs8R!#=$|-G0uvWHT#g zZyt@Of2X>>iT(zDAY<_ttCZ&L{xYYouIYKbttZ6NlX=Shide15M8(NM?vF^0aT+y%!0`ogW)TgZ!FXXILEX# zJ?zzUX$^YM8^a|rJ`nE(#)w5cL3=ZRhj7N&oh6U-Sx89s6^M;R+mq*BXMXT$r=5CM~sx668OmQ6qFC&Y; zwhRY^iGFhhAGvX?T{lYiB$Qp`ef{R_uvzKF*Kya+eg`6G-%vSweitH?L=FwSIrVHU zPb9}aU3*;Xr7&Y#tnRz1D!rIhdF9&ufr==$SmX_V)L265HdB+3lhSG#FQ_*lW9oeZ zwLD&S_UYGkAB_s9(w!ym(v~If?tJ@@x@2tCqh-4(Ndu5*soS%Djt}qk57<(Bu9hrC zxJ8}S34)e{f=O8O!{TFr%k1u4H^Jnm-#JGoAsuI?B1k;|^19JN? zb%R#3Ur#C9uor}uPTOWE*5a@v0^rBGHK9|8svsXGvPlTg`>kl_4i9(R3E zF4G=9D=ZG<@C*G}s8k@V`LOTFs!>486^>nZW8S;NDUVDJ1$%A!%iL}bzoY_VL8!X; z0vhtUT3GOvsggl-e(0*^#spGvH3IWiI^U-E1CX)E3BcbR{U?$mc6D`WDP8_}Gz^&M zi}~pup6PHgsGOfpJlycH+{MBr_5~SHYm}{D?;ddF!IdJyAHN(aQOw(~SP&;Wjw=tV zaz54T@Y* z1R7u7&GN|ncD*gLZN2z`PO&rLyX3{)qsLY~x(omkmWS$$078Q^G)cf1Tn|e!`hLmO z^ai^y8Oyp0F|FTaKnZ8|7q^+;97fs`@<PO-FNoBL*pWMNV-@``f3q@xxI)W zT?p=cxy;3Uq}z-sxOpX23Y?c5m>2GkWHRpU9+LYX!@JEYf{6E^=U;4WN4znt0aG__ z9!&P#G_$y&?H7TJ!ZM=!KTP`g^l0Kt+YMoXduzktlZqX}2}8;5c}LgQR{fF6h*!uj z0Y9wvR^~KMiAMw`L+zNhR5tOzwOQqn%^(wxN(o%p&hu9 zI#?3r{Yy{a^&jt#|6I(#pu24cz@S@yD~GymyP3C7LOBBJVpHWk)pZC5cFG&RH(>^_ z80DGmaJ2sTM*vBG{1R)n7J>YFvvXLtolQ*Jf3e|)+V6uAz|7%jNqe!U^OAljEEb*d zPRs9xL6|0a1(2SvEM)!15}#T!vgPs-fZbUtJ4zjc9$f_H+0VRA0rHM)BW!ku*)}HA z+=vtRWW;xooXqfE%@2Y8${F}~CbRSv%NjFLz3I>YD~>_Mj++CWoT)Cb)o>(%B%#uZ zkvxV64^l^6WLLcRr#yEUkby4088PiB_y`6}65!j@l!(EjzH$r+&-+cnxDI8cuHx&hHQK~B9=7I8(u<`9cZS+83gKokQQALoP_qZr*Z78z+Zt>a zSu|OXm_j6ci5C6@W%&lBp-f6*!?p)q^%I5p$F_vnmDT{Cn2ZL@2e4&-ghxmAe=O>F z=WJ|d(|H>sxa|aNjd=z}mlP3%P&LO7SC}Yo0O;t!TpR^P5SQ{5(7@`P{r?^T#{XER zxBCTXFGu|b;Q<-%kG-bJ0IZoQr8 zEAtAE%z2quYABF|lgxS`pC&C529~Tk5oB;pJ?{CbS3HVuBA3Ceh$wv=TK5nPnMifU z^q^F1JA-q6e@F%&LM_6B#9M|#EdQ@5HJ2LOV)*73MKHyY(H+^_nploGN2x@W=N?j4f>gn)(kEZtE_;6ECJP_XetjvVx;x6k zqhNeGNT>GGMBMIL1?UnRxl%qIx4#6k_q zW}@x`+>5Q68J(~DjYZ1_mRt)syY(two!yZ$A~W-RY9e;`_XGyD-27OCG@+9~*_trA z+ihPQG&}8Vv^W4G&pDjQ_6gS=pP*xZZuHlp{Y*BRFOoj-A03O&`-O?6SYZ9jD}!fY z^at{h)7b;{Hb^r$tAv2JoI;adPx`-dV5{=4O#XaQD-Z|k4f?0WQ0@l>QU0aU?j1@o z^_%Q;SbG~6@{V{IN7m6$3Nh+<#=$In)BMp8NW;Fufd+ZF~l%?tV$&d}a*+r|0%BjI5Gu7j0_gp)?#17PBz7hy5sy@v0Y zkG==c#dcRC@c^iHzs-vG%c|Qlm{a!kTJj$)|B0GiFNrToV z!<0+`Co$tUmC5YS9&^0cXFbz6b*mJTN?Mykb;2!oOmKqusL&hn?3B(UvU(EXwmHZ5x=*+=1TcW2a3w@0oDiHIRozVZ*lj+1e~HZhc!F& zcF{Y`HP8^Ew;t>b>uM$MASK+{B*pLTu_CldG5zq*#Sydf)?0Jdw5{SJ&Oe9nTxP3y z3d#Ix-Bsl5HIdQ=;|~GTr+xccGJ5`8FFC)&^%`7Wdn(oyq3p=&VZW)*{647(*;%`B z1ZfUqJ+l20srlG-T7x`P3*O1QGOUbZHUB!kZ_F4wbLqc>goQL#rT^i}>Ch71 z9pmVHoBWXNLx|4pFWzli5cTNYK8&a$AeT-f!>)+`WCGz#SDiyhV*Nq^WEBOShFx(|GF~$*G@yHw>m21hqa&hN(ATf5+l51KX@UuRBM&ujEdBcD}SgLD;7sggfCzD3c%{rbC-%=J`;!^XrBd6Ser0S>0?z+gW#NNnK1IgDO=XczSU$@GI) zl7YJjn`o3y*+XDcjLMxybChRa5mdl5GbYCCR_P)l6P(Z$mD0{|%LD$$9h~ zan@P-X&9&EhwuD_vL}n}jJTR*yNX1fSEL@YEhO&_)uY9tUW@6nAMrUC6eoM;_^l*~ z>ZcaB1%)!fWDNM_+TLY!rfS8)EZTSQZeyd%RKl3U*CzBxRpX9M!m+HSCS(SWQjlPX zJaqVH=a2k2vgE`TU+5$McV+LinzV|dq)Eu}YYBQRJHZb+j9ns!;bR0tXO3(H!3*WVudVW^HMeo>QY6Fu#=NfVBVhrr* zmpJ9w%<6lU|6>78{S;Q43IE}OXQ(4u()RJx@-geC21MS^&%gO`UNQnM9=c5Y^oKgi zqnyY0#!yH!f$cCn%|!L~O z`F&6&Rs+ z!JA+Rs2hA{q8rNA!M7H&z(@ObY~n&ozY7ys*^nz~A&kU1^EXT+AR6R2R;)})LSuSu zbC>{^PQfbaM{CUlEYhgdGej+?FD2zSWa3+1neYH^RJ;R)(O5zJ#l|nvw0634{-AI! zGlDqFN^(y)xd)UO%~$gt=Ix;hWDr;MwDuPz_eg^e!b9Gv;P1+HJgU6%xX7Uvvy%FS zjbmBo+3p(xS8k%mSl=_0!%t+l zbz+cya8rE(e6NC;cCB0S%jbg4KFKtjckjG@2u=@pWZ(V8Of8v6LAJhJ3GE+@u%{Xu z&nSF2dJT|T-ZR=FEsswzrx!S=x7XxAT?&b_Q2vu&~R?h5+~#C`g)|-7yTq3 z_oY5&nR?=j%`ZUw)wlt+;9FAEbK4|_g38ES@sre&7*$-1j^~oX1$}>?k5?#*i7Gz6 z(oN+`hXE^iJg?@ZjB4;34#EeQWl_%gh_^+4DR{^5kvzX* zYw%-*T~;qQbUIMlMo3mQul8QC12{nvd_w{ZKOJ?I8K0+3O63P~)fI^4I()sngIS!a zFsb5C=EGCcw=}@cmt}7Zdg1uuzo6qX-DRq)#f8F+vxGd*lswBWTI3d=nIM;a7d}PR zw0u93xtO&u>^pUFa=i6#U3*n=>fX%DZ~x>Ip?D2ZnEa4}%iGgX}=?+8uwg=fW)b|15|KekP6Z#Hyd`6|;w(1y@<6e%mI&fq4Y`mb4@4w<$IoW2pBs=g53B2AIxg}xVAw;m zi7vfn=V`1xAxIvIdZJDUaUR|k%{!^!vnRU6L9?~PZ|&)_^@M~>*K~P@0H5OI;E9ps zy)L)!C!r*h2w8*97BV?}jy;&ONLEUA4}A7Eaf>dc$4h}Hf|69K^d`E+K@^V`D$9iL z%Uma8Cvl!J6K5G5P<}oIM!Nu1XEjm8&4=EW5cFhe2fKDX9BmHgwU``&{W6OVG zyN<)rsh`~Wo<}<6Ecv%N^iFvYs6vj}qKUoBk6u)quqdJ^8S}+3Z!Wy7;p<12q~C+^9kP#kRb*zb1-} z1(Gu6jmCPPl5C1a>N347(NfYKKcAar{;24?enI%@r6CJ}C#H(&x%W+GJT)t{@7wp= z&nxd1?w>(;ov@E=P!^sBtAc&z#zS_EangmN`8XbHp?8a=Kpr*1Hz8euGEcdk5DZR=sPdI{Nj3ggx? z*${QhIN#8st+lN=E9A&njH0~7)WOp{ci$hG`ZpnjH)Rzt8=)a@wtqX_4})<$sc12< z=o#wP__^AyR+#!z)Ycr&8SC<`y9?|2wu%-E%bCJWmllSrNT?Nsn|r$R#78z;)wIx6r3Yoi0{7BwEHU|}yn zS+6sGybJMJ=6$aZPKJlN3LkpY>Vf~(BD_nHNK+*ax$pNeP`i(yOAl!y4i2fw3*2K* zhMIaHB5T=iRH?(CJbl$>Xng&%l|SwQQPiJmb=XWt#d2QKp{e zyu+NzcND*D4g6(1WdPt)##pVt#zYjjqi*rupl1K!UanqU~x{B^Rv>XydyCZrn2SAChZ zQK#A8lIk|oE|%VJEX6R~WPWn%4pgKSi2JhKbaJrdqJU!A`Xqw`{z9Cy8sRcXYzeJ|QT zHM`!K$Om}yHc_J7eX>t>ck0`mpA~2A$RFRX>+q418so(rTZ~OOdq-f^1Iu<^(U;pH z^Dahk&Hx25n(S!+Wfx~fN&!p+(!{zpp7R+OBs6|dC=V;w%+a23m|JA#wdrChnW>sx zuP1UgjSx-~+ODGa*|$fM>*wyzILey`6)#HTOfzRwZuJNWX8ndwgfd%>7j~NnQSm#vdP8c4z7noLF+1!% zjJ(-GdfmBx4|ljWkGO_+$prj4485q5*@`QR8UxvOi84oob#h-If|B68be|;{Z>XTt zSertbKG2ZZdTr2z{_Pne=qycrU_Ni30yFj;>J=9nw*X9T4r^9TQ;0aer1)bLPqVQm zNnGyxc3Xu6&fPx@d9wORLbthPicW`6tAc=ziRT#6eK76kg+UUM{QnpGOToZt~ zfTX_H$ditVv<> z+RllU(LhAYSkHDr|31r^7w+-`R!BdPE}U>%JfFKd3C0^c*935O_x{G}p~OOGXw7X|PV>7a_F=>zPFOEZQEwUO#f-pWeCAHu2U69hWB+ zo@QI&or3&>_bWdCJ2&Xjgub9$bdcSOKs|f0!6EDTedr_|1iLzALpb-D z;T`B4_Qp`Q-l;nAFej`=RikWgO>J-txtDw7IBNz0s}x#fl&i*9Xc+juY*~@+fIX8gM-CUh zi^XbpKmWvInfI9b+aw)7qVz!3f%Nsao=m97$9KNDM%SG*?psZ|Uor2y*7_j{J;dW1 z#ITLzXC&!y(AkY07_8lb(buUd%@&bCB<;|Kd@td*r=h Ix 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

    QwyK-ro_~V| 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 v6yUKd7}Ck#$HnkvNkcB*!D9cci#0F((; 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�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 V(Xz!C!pI--!Azu|@S1klyhAP6mKpPy1%2hP-2e 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 JnSuWO_J4j~+7|!- literal 30204 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 QF#vzG)o-emsA3-df9#C+qyPW_ diff --git a/extension/manifest.json b/extension/manifest.json index f1589a2..4867eb6 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,21 +1,19 @@ { "manifest_version": 3, - "name": "MoodleGPT", - "version": "1.1.5", - "description": "Hidden chat-gpt for your moodle quiz", + "name": "SparkAssist", + "version": "2.0.0", + "description": "An AI study assistant for your quizzes", "permissions": ["storage"], "action": { "default_icon": "icon.png", "default_popup": "./popup/index.html" }, - "icons": { "16": "icon.png", "32": "icon.png", "48": "icon.png", "128": "icon.png" }, - "content_scripts": [ { "matches": ["*://*/**/mod/quiz/attempt.php*", "*://*/mod/quiz/attempt.php*", "file:///*"], diff --git a/extension/popup/index.html b/extension/popup/index.html index d3ba55d..f6dfd7d 100644 --- a/extension/popup/index.html +++ b/extension/popup/index.html @@ -2,170 +2,167 @@ - - MoodleGPT + SparkAssist - - diff --git a/extension/popup/popup.js b/extension/popup/popup.js index fd4bc70..0c5690f 100644 --- a/extension/popup/popup.js +++ b/extension/popup/popup.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="1.1.5",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="2.0.0",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); //# sourceMappingURL=popup.js.map diff --git a/extension/popup/style.css b/extension/popup/style.css index 60a1936..a28af50 100644 --- a/extension/popup/style.css +++ b/extension/popup/style.css @@ -1,194 +1,312 @@ -@font-face { - font-family: Segeo UI; - src: url(../../fonts/Segoe\ UI.ttf); -} +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap'); :root { - --bg-color: #121212; - --color: #fff; - --btn-color: #7f39fb; + --bg-color: #0b0f19; + --panel-bg: rgba(255, 255, 255, 0.05); + --color: #e2e8f0; + --color-muted: #94a3b8; + --btn-color: #8a2be2; + --btn-hover: #9d4edd; + --accent: #00f0ff; + --border-color: rgba(255, 255, 255, 0.1); + --font-family: 'Inter', sans-serif; } * { box-sizing: border-box; padding: 0; margin: 0; - font-family: 'Segeo UI', sans-serif; + font-family: var(--font-family); color: var(--color); } body { + width: 380px; min-height: 100vh; background-color: var(--bg-color); + background-image: + radial-gradient(circle at top right, rgba(138, 43, 226, 0.15), transparent 60%), + radial-gradient(circle at bottom left, rgba(0, 240, 255, 0.15), transparent 60%); display: flex; justify-content: center; - align-items: center; + align-items: flex-start; } main { display: flex; flex-direction: column; - align-items: center; - padding: 0.75rem; - gap: 0.4rem; - text-align: center; - width: 22rem; -} - -.settings { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.4rem; - text-align: center; + padding: 1.5rem; + gap: 1rem; width: 100%; } -img { - width: 5rem; -} - -a { - color: var(--btn-color); - margin: 0; -} - -.line { +/* Header */ +.header { display: flex; - flex-direction: row; - width: 100%; - gap: 0.5rem; -} - -.center { - justify-content: center; align-items: center; + gap: 1rem; + margin-bottom: 0.5rem; } -.center-y { - align-items: center; +.header img { + width: 3.5rem; + filter: drop-shadow(0 0 8px rgba(0, 240, 255, 0.5)); } -.line .textLabel { - width: 5rem; - text-align: left; - text-transform: uppercase; -} - -.line .textLabel .required { - color: var(--btn-color); - font-weight: bold; -} - -.line input[type='text'], -.line input[type='password'], -.line input[type='number'], -.line select { - flex: 1 1; - border: thin solid var(--color); - padding: 0.3rem 0.5rem; - border-radius: 0.2rem; - outline-color: transparent; - background-color: transparent; -} - -.line option { - color: #000; -} - -.line input[type='checkbox'] { - accent-color: var(--btn-color); -} - -.col { - display: flex; - flex-direction: column; - text-align: left; -} - -.save { - border: none; - background-color: var(--btn-color); - padding: 0.5rem 2rem; - margin-top: 1rem; - cursor: pointer; - border-radius: 0.2rem; +.header-text h1 { font-size: 1.5rem; - margin-bottom: 0.75rem; -} - -.mt { - margin-top: 1rem; -} - -.not-selected { - opacity: 0.4; -} - -#mode li { - list-style: none; - flex-grow: 1; -} - -#mode { - flex-wrap: wrap; -} - -#mode button { - background-color: var(--btn-color); - border: none; - text-align: center; - padding: 0.3rem 0.75rem; - cursor: pointer; - width: 100%; - border-radius: 0.5rem; - text-transform: uppercase; + font-weight: 600; + background: linear-gradient(90deg, #00f0ff, #8a2be2); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; } #version { - font-size: 0.75rem; + font-size: 0.8rem; + color: var(--color-muted); +} + +/* Panels */ +.panel { + background: var(--panel-bg); + border: 1px solid var(--border-color); + border-radius: 12px; + padding: 1rem; + backdrop-filter: blur(10px); + display: flex; + flex-direction: column; + gap: 0.8rem; +} + +/* Form Groups */ +.form-group { + display: flex; + flex-direction: column; + gap: 0.3rem; + text-align: left; +} + +.form-group label { + font-size: 0.8rem; + color: var(--color-muted); + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.form-group label .required { + color: var(--accent); + margin-left: 2px; +} + +.input-with-icon { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.input-with-icon input { + flex: 1; +} + +.input-with-icon i { + color: var(--accent); + cursor: pointer; + transition: transform 0.2s; +} + +.input-with-icon i:hover { + transform: scale(1.1); +} + +input[type='text'], +input[type='password'], +input[type='number'] { + width: 100%; + background: rgba(0, 0, 0, 0.3); + border: 1px solid var(--border-color); + padding: 0.6rem; + border-radius: 6px; + outline: none; + transition: + border-color 0.2s, + box-shadow 0.2s; +} + +input[type='text']:focus, +input[type='password']:focus, +input[type='number']:focus { + border-color: var(--accent); + box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.2); +} + +#switch-settings { + font-size: 0.8rem; + color: var(--color-muted); + text-decoration: none; + text-align: center; + display: block; + transition: color 0.2s; +} + +#switch-settings:hover { + color: var(--accent); +} + +/* Mode Buttons */ +.section-title { + display: flex; + align-items: center; + gap: 0.5rem; + font-size: 0.9rem; + font-weight: 500; + margin-top: 0.5rem; +} + +.section-title i { + color: var(--btn-color); +} + +#mode { + display: flex; + gap: 0.5rem; + list-style: none; +} + +#mode li { + flex: 1; +} + +#mode button { + width: 100%; + background-color: transparent; + border: 1px solid var(--btn-color); + color: var(--color); + padding: 0.5rem; + border-radius: 6px; + cursor: pointer; + text-transform: uppercase; + font-size: 0.8rem; + transition: all 0.2s; +} + +#mode button:not(.not-selected) { + background-color: var(--btn-color); + box-shadow: 0 0 10px rgba(138, 43, 226, 0.4); +} + +/* Toggle Switches for Options */ +.options-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 0.8rem; +} + +.toggle-row { + display: flex; + align-items: center; + justify-content: space-between; +} + +.toggle-row label { + font-size: 0.85rem; + cursor: pointer; +} + +/* Custom Checkbox as Toggle */ +.toggle-switch { + position: relative; + display: inline-block; + width: 36px; + height: 20px; +} + +.toggle-switch input { + opacity: 0; + width: 0; + height: 0; +} + +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(255, 255, 255, 0.1); + transition: 0.3s; + border-radius: 20px; +} + +.slider:before { + position: absolute; + content: ''; + height: 14px; + width: 14px; + left: 3px; + bottom: 3px; + background-color: white; + transition: 0.3s; + border-radius: 50%; +} + +input:checked + .slider { + background-color: var(--accent); + box-shadow: 0 0 8px var(--accent); +} + +input:checked + .slider:before { + transform: translateX(16px); +} + +/* Actions */ +.save { + background: linear-gradient(90deg, var(--btn-color), var(--accent)); + border: none; + padding: 0.8rem; + border-radius: 8px; + color: #fff; + font-weight: 600; + font-size: 1rem; + cursor: pointer; + width: 100%; + transition: + transform 0.2s, + box-shadow 0.2s; +} + +.save:hover { + transform: translateY(-2px); + box-shadow: 0 4px 15px rgba(138, 43, 226, 0.5); } #message { display: none; - margin-bottom: -0.5rem; + font-size: 0.85rem; + text-align: center; + color: var(--accent); } -#reloadModel { - cursor: pointer; +/* Footer Links */ +.footer { + display: flex; + justify-content: center; + gap: 1rem; + margin-top: 0.5rem; } -#reloadModel[disabled] { - cursor: not-allowed; - opacity: 0.75; +.footer a { + font-size: 0.8rem; + color: var(--color-muted); + text-decoration: none; + transition: color 0.2s; +} + +.footer a:hover { + color: var(--accent); } .donate { - color: white; - animation: infinite donate 5s linear; + color: var(--accent) !important; font-weight: bold; } - -@keyframes donate { - 0% { - transform: translateX(0); - } - 3.57% { - transform: translateY(-9px); - } - 7.14% { - transform: translateY(-9px) rotate(17deg); - } - 10.78% { - transform: translateY(-9px) rotate(-17deg); - } - 14% { - transform: translateY(-9px) rotate(17deg); - } - 18% { - transform: translateY(-9px) rotate(-17deg); - } - 22% { - transform: translateY(0) rotate(0); - } -} diff --git a/package-lock.json b/package-lock.json index c1f0175..8cc4fd4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "moodlegpt", - "version": "1.1.5", + "name": "sparkassist", + "version": "2.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "moodlegpt", - "version": "1.1.5", + "name": "sparkassist", + "version": "2.0.0", "license": "MIT", "devDependencies": { "@eslint/js": "^9.32.0", diff --git a/package.json b/package.json index b94e68e..2827ff4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "moodlegpt", - "version": "1.1.5", - "description": "This extension allows you to hide CHAT-GPT in a Moodle quiz.", + "name": "sparkassist", + "version": "2.0.0", + "description": "An AI study assistant for your quizzes.", "scripts": { "build": "npm run prettier && npm run lint && npm run fastBuild", "fastBuild": "rollup -c", diff --git a/src/popup/version.ts b/src/popup/version.ts index 42aba0b..2ff3e17 100644 --- a/src/popup/version.ts +++ b/src/popup/version.ts @@ -1,4 +1,4 @@ -const CURRENT_VERSION = '1.1.5'; +const CURRENT_VERSION = '2.0.0'; const versionDisplay = document.querySelector('#version')!; /** From d36949b42f08d397a9292f720f5da498cd6ad8a6 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Tue, 5 May 2026 19:12:54 +0200 Subject: [PATCH 11/12] Enhance clipboard mode to format answers based on question type --- extension/MoodleGPT.js | 2 +- extension/MoodleGPT.js.map | 2 +- src/background/core/questions/clipboard.ts | 121 ++++++++++++++++++++- src/background/utils/logs.ts | 1 - 4 files changed, 122 insertions(+), 4 deletions(-) diff --git a/extension/MoodleGPT.js b/extension/MoodleGPT.js index 0afcbe1..d8414a2 100644 --- a/extension/MoodleGPT.js +++ b/extension/MoodleGPT.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response),console.log("Normalized:\n"+e.normalizedResponse)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver.\nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new O(e,r,s,n):422===e?new I(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class O extends b{}class I extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class P extends Error{constructor(e){super(e)}}const L=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(Deno.build.os),"X-Stainless-Arch":F(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(globalThis.process.platform??"unknown"),"X-Stainless-Arch":F(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const F=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",H=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Oe,Ie;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Pe extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Oe.set(this,void 0),f(this,Oe,e)}_thenUnwrap(e){return new Pe(m(this,Oe,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Oe,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Oe=new WeakMap;class Le{constructor(e,t,s,n){Ie.set(this,void 0),f(this,Ie,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Ie,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Ie=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Pe{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Le{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Fe=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],He=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(Fe(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Fe(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,Ot,It,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Pt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Lt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",Ot).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",It).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",Ot).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",It).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Lt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Pt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ft=32,Ht=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ft&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ft&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",He({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",He({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Os extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Is=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ps,Ls,Ns,js,Ms,Ds,Ws,Bs,Us,Fs,Hs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ps.set(this,{}),Ls.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ps=new WeakMap,Ls=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Hs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ls,"f")}currentRunStepSnapshot(){return m(this,Fs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ps,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Hs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Hs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ls,"f"));f(this,Ls,t),m(this,Ps,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ls,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ls,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ls,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ls,"f"))}}m(this,Ls,"f")&&this._emit("messageDone",e.data),f(this,Ls,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Fs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Fs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Os(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Os;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,He({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",He({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",He({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class On extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class In extends ze{constructor(){super(...arguments),this.clientSecrets=new On(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Pn(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Pn(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Ln,Nn,jn,Mn,Dn,Wn,Bn,Un;In.ClientSecrets=On;class Fn extends Tt{constructor(e){super(),Ln.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Fn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Ln,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Ln,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Ln,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Ln=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Ln,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Hn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Hn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Pn(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Pn(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Fn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Hn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,He({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new P("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new P("Webhook timestamp is too old");if(c>l+n)throw new P("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new P("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Is("OPENAI_BASE_URL"),apiKey:t=Is("OPENAI_API_KEY"),organization:s=Is("OPENAI_ORG_ID")??null,project:n=Is("OPENAI_PROJECT_ID")??null,webhookSecret:r=Is("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new In(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Is("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>L.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Pe(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=O,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=I,or.InvalidWebhookSignatureError=P,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=In,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard");const n=s.rawResponse||JSON.stringify(s.response)||"";navigator.clipboard.writeText(n)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_schema",json_schema:u});const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u&&f)try{m=JSON.parse(f)}catch(e){console.error("Failed to parse structured JSON response",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";function e(e){const t=document.title;document.title=e,setTimeout((()=>document.title=t),3e3)}function t(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function s(e,t){const s=e.length>t.length?e.length:t.length;return 0===s?1:(s-function(e,t){if(0===e.length)return t.length;if(0===t.length)return e.length;const s=[],n=e.replace(/\s+/,""),r=t.replace(/\s+/,"");for(let e=0;e<=n.length;++e){s.push([e]);for(let t=1;t<=r.length;++t)s[e][t]=0===e?t:Math.min(s[e-1][t]+1,s[e][t-1]+1,s[e-1][t-1]+(n[e-1]===r[t-1]?0:1))}return s[n.length][r.length]}(e,t))/s}function n(e,t){let n={element:null,similarity:0,value:null};for(const r of t){const t=s(r.value,e);if(1===t)return{element:r.element,value:r.value,similarity:t};t>n.similarity&&(n={element:r.element,value:r.value,similarity:t})}return n}"function"==typeof SuppressedError&&SuppressedError;class r{static question(e){console.log("%c[QUESTION]: %s","color: cyan",e)}static bestAnswer(e,t){console.log("%c[BEST ANSWER]: %s","color: green",`"${e}" with a similarity of ${function(e){return Math.round(100*e*100)/100+"%"}(t)}`)}static array(e){console.log("[CORRECTS] ",e)}static response(e){console.log("Original:\n"+e.response)}}var o;function i(e,t=!0){t&&(e=e.toLowerCase());return e.replace(/\n+/gi,"\n").replace(/(\n\s*\n)+/g,"\n").replace(/[ \t]+/gi," ").trim().replace(/^[a-z\d]\.\s/gi,"").replace(/\n[a-z\d]\.\s/gi,"\n")}function a(e,t){const s=[];return e.querySelectorAll(t).forEach(((t,n)=>{var r,o,a;if("-1"===t.value)return;let c="";const l=e.querySelector(`#${t.id.replace(/:/g,"\\:")}_label`);c=l?null!==(r=l.textContent)&&void 0!==r?r:"":null!==(a=null===(o=t.parentElement)||void 0===o?void 0:o.textContent)&&void 0!==a?a:"",c=i(c.replace("Clear my choice","")),c&&s.push({index:n,text:c})})),s}!function(e){e.SINGLE_CHOICE="single_choice",e.MULTIPLE_CHOICE="multiple_choice",e.TRUE_FALSE="true_false",e.SHORT_TEXT="short_text",e.NUMERICAL="numerical",e.ESSAY="essay",e.MATCH="match",e.SELECT_MISSING_WORD="select_missing_word",e.DRAG_DROP_TEXT="drag_drop_text",e.ORDERING="ordering",e.UNKNOWN="unknown"}(o||(o={}));const c={role:"system",content:"\nYou are an expert quiz solver.\nPlease solve the provided question based on its type and provide the correct result.\n- For choice questions, output the exact index(es) of the correct answer(s).\n- For text/numerical questions, provide the exact wording or number.\n- For essay questions, provide a highly detailed and complete response, adapting exactly to the requested 'format' (HTML vs plain text) and building upon any 'initial_text' template if supplied.\n".trim()};function l(e,s,n){return t(this,void 0,void 0,(function*(){const t=s.querySelectorAll("img");if(!e.includeImages||!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(e.model)||0===t.length)return n;const r=[],o=Array.from(t).map((e=>function(e,t=.75){return new Promise(((s,n)=>{const r=document.createElement("canvas"),o=r.getContext("2d");if(!o)return n("Can't get the canvas context, ensure your navigator support canvas"),void r.remove();const i=new Image;i.crossOrigin="Anonymous",i.onload=()=>{r.width=i.width,r.height=i.height,o.drawImage(i,0,0);const e=r.toDataURL("image/png",t);s(e),r.remove()},i.onerror=e=>{n(e),r.remove()},i.src=e.src}))}(e))),i=yield Promise.allSettled(o);for(const t of i)"fulfilled"===t.status?r.push({type:"image_url",image_url:{url:t.value}}):e.logs&&console.error(t.reason);return r.push({type:"text",text:n}),r}))}function u(){var e,t;const s=new URLSearchParams(document.location.search);return{host:document.location.host,cmid:null!==(e=s.get("cmid"))&&void 0!==e?e:"",attempt:null!==(t=s.get("attempt"))&&void 0!==t?t:"",history:[]}}function d(){var e;return JSON.parse(null!==(e=sessionStorage.moodleGPTHistory)&&void 0!==e?e:"null")}function h(e,t){const s=["host","cmid","attempt"];for(const n of s)if(e[n]!==t[n])return!1;return!0}function p(e,s,n){return t(this,void 0,void 0,(function*(){const t=function(e,t){const s=e.closest(".que")||e.closest(".formulation")||e;if(s.classList.contains("multichoice")||s.classList.contains("calculatedmulti")){const e=s.querySelectorAll('.answer input[type="checkbox"]'),n=s.querySelectorAll('.answer input[type="radio"]');if(e.length>0)return{question_type:o.MULTIPLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="checkbox"]')};if(n.length>0)return{question_type:o.SINGLE_CHOICE,question_text:t,answer_options:a(s,'.answer input[type="radio"]')}}if(s.classList.contains("truefalse"))return{question_type:o.TRUE_FALSE,question_text:t};if(s.classList.contains("shortanswer"))return{question_type:o.SHORT_TEXT,question_text:t};if(s.classList.contains("numerical")||s.classList.contains("calculated")||s.classList.contains("calculatedsimple"))return{question_type:o.NUMERICAL,question_text:t};if(s.classList.contains("essay")){let e="plain_text",n="";s.querySelector(".qtype_essay_editor")&&(e="html");const r=s.querySelector("textarea");r&&(n=r.value||r.textContent||"",n=i(n));const a={question_type:o.ESSAY,question_text:t,format:e};return n&&(a.initial_text=n),a}if(s.classList.contains("match")){const e=[],n=[],r=s.querySelectorAll("tr");let a=0;return r.forEach((t=>{const s=t.querySelector(".text"),r=t.querySelector("select");if(s&&r){if(e.push({index:a,text:i(s.textContent||"")}),0===a){const e=r.querySelectorAll("option");let t=0;Array.from(e).slice(1).forEach((e=>{n.push({index:t++,text:i(e.textContent||"")})}))}a++}})),{question_type:o.MATCH,question_text:t,sub_questions:e,options:n}}if(s.classList.contains("gapselect")){const e=s.querySelectorAll("select"),n=[];return e.forEach(((e,t)=>{const s=e.querySelectorAll("option"),r=[];let o=0;Array.from(s).slice(1).forEach((e=>{r.push({index:o++,text:i(e.textContent||"")})})),n.push({index:t,options:r})})),{question_type:o.SELECT_MISSING_WORD,question_text:t,drop_downs:n}}if(s.classList.contains("ddwtos")){const e=s.querySelector(".answercontainer"),n=[];return e&&e.querySelectorAll(".draghome.unplaced").forEach(((e,t)=>{n.push({index:t,text:i(e.textContent||"")})})),{question_type:o.DRAG_DROP_TEXT,question_text:t,draggables:n}}if(s.classList.contains("ordering")){const e=s.querySelector(".sortablelist"),n=[];return e&&e.querySelectorAll(".sortableitem").forEach(((e,t)=>{var s;let r=(null===(s=e.textContent)||void 0===s?void 0:s.trim())||"";if(""===r){const t=e.querySelector("img");t&&(r=t.getAttribute("alt")||"")}n.push({index:t,text:i(r)})})),{question_type:o.ORDERING,question_text:t,items:n}}return null}(s,n),r=t?JSON.stringify(t,null,2):n,p={role:"user",content:yield l(e,s,r)},f=s=>{const n={history:s};return{messages:[c,...s,p],query:t,saveResponse(t){if(e.history){let e;n.history.push(p),n.history.push({role:"assistant",content:t});const s=d(),r=u();e=null!==s&&h(s,r)?s:r,e.history=n.history,sessionStorage.moodleGPTHistory=JSON.stringify(e)}}}};if(!e.history)return f([]);const m=d(),g=u();return null!==m&&h(m,g)?f(m.history):f(g.history)}))}function f(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function m(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}let g=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return g=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function y(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const _=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class w extends Error{}class b extends w{constructor(e,t,s,n){super(`${b.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new x({message:s,cause:_(t)});const r=t?.error;return 400===e?new A(e,r,s,n):401===e?new E(e,r,s,n):403===e?new R(e,r,s,n):404===e?new $(e,r,s,n):409===e?new I(e,r,s,n):422===e?new O(e,r,s,n):429===e?new q(e,r,s,n):e>=500?new k(e,r,s,n):new b(e,r,s,n)}}class v extends b{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class x extends b{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class S extends x{constructor({message:e}={}){super({message:e??"Request timed out."})}}class A extends b{}class E extends b{}class R extends b{}class $ extends b{}class I extends b{}class O extends b{}class q extends b{}class k extends b{}class C extends w{constructor(){super("Could not parse response content as the length limit was reached")}}class T extends w{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class L extends Error{constructor(e){super(e)}}const P=/^[a-z][a-z0-9+.-]*:/i;let N=e=>(N=Array.isArray,N(e)),j=N;function M(e){return"object"!=typeof e?{}:e??{}}function D(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const W=e=>new Promise((t=>setTimeout(t,e))),B="5.23.2";const U=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(Deno.build.os),"X-Stainless-Arch":F(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":H(globalThis.process.platform??"unknown"),"X-Stainless-Arch":F(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":B,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const F=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",H=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let X;function J(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function K(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return J({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function G(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const V=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),z="RFC3986",Q=e=>String(e),Y={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Q};let Z=(e,t)=>(Z=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),Z(e,t));const ee=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),te=1024;function se(e,t){if(N(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},re=function(e,t){Array.prototype.push.apply(e,N(t)?t:[t])};let oe;const ie={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=te?o.slice(e,e+te):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=ee[n]:n<2048?s[s.length]=ee[192|n>>6]+ee[128|63&n]:n<55296||n>=57344?s[s.length]=ee[224|n>>12]+ee[128|n>>6&63]+ee[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=ee[240|n>>18]+ee[128|n>>12&63]+ee[128|n>>6&63]+ee[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:z,formatter:Q,indices:!1,serializeDate:e=>(oe??(oe=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const ae={};function ce(e,t,s,n,r,o,i,a,c,l,u,d,h,p,f,m,g,y){let _=e,w=y,b=0,v=!1;for(;void 0!==(w=w.get(ae))&&!v;){const t=w.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===w.get(ae)&&(b=0)}if("function"==typeof l?_=l(t,_):_ instanceof Date?_=h?.(_):"comma"===s&&N(_)&&(_=se(_,(function(e){return e instanceof Date?h?.(e):e}))),null===_){if(o)return c&&!m?c(t,ie.encoder,g,"key",p):t;_=""}if("string"==typeof(x=_)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(_)){if(c){const e=m?t:c(t,ie.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(_,ie.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(_))]}var x;const S=[];if(void 0===_)return S;let A;if("comma"===s&&N(_))m&&c&&(_=se(_,c)),A=[{value:_.length>0?_.join(",")||null:void 0}];else if(N(l))A=l;else{const e=Object.keys(_);A=u?e.sort(u):e}const E=a?String(t).replace(/\./g,"%2E"):String(t),R=n&&N(_)&&1===_.length?E+"[]":E;if(r&&N(_)&&0===_.length)return R+"[]";for(let t=0;t0?d+u:""}let ue,de;function he(e){let t;return(ue??(t=new globalThis.TextEncoder,ue=t.encode.bind(t)))(e)}function pe(e){let t;return(de??(t=new globalThis.TextDecoder,de=t.decode.bind(t)))(e)}var fe,me;class ge{constructor(){fe.set(this,void 0),me.set(this,void 0),f(this,fe,new Uint8Array),f(this,me,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?he(e):e;f(this,fe,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([m(this,fe,"f"),t]));const s=[];let n;for(;null!=(n=ye(m(this,fe,"f"),m(this,me,"f")));){if(n.carriage&&null==m(this,me,"f")){f(this,me,n.index);continue}if(null!=m(this,me,"f")&&(n.index!==m(this,me,"f")+1||n.carriage)){s.push(pe(m(this,fe,"f").subarray(0,m(this,me,"f")-1))),f(this,fe,m(this,fe,"f").subarray(m(this,me,"f"))),f(this,me,null);continue}const e=null!==m(this,me,"f")?n.preceding-1:n.preceding,t=pe(m(this,fe,"f").subarray(0,e));s.push(t),f(this,fe,m(this,fe,"f").subarray(n.index)),f(this,me,null)}return s}flush(){return m(this,fe,"f").length?this.decode("\n"):[]}}function ye(e,t){for(let s=t??0;s{var n,r;if(e)return n=we,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void Ee(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(we))}`)};function ve(){}function xe(e,t,s){return!t||we[e]>we[s]?ve:t[e].bind(t)}const Se={error:ve,warn:ve,info:ve,debug:ve};let Ae=new WeakMap;function Ee(e){const t=e.logger,s=e.logLevel??"off";if(!t)return Se;const n=Ae.get(t);if(n&&n[0]===s)return n[1];const r={error:xe("error",t,s),warn:xe("warn",t,s),info:xe("info",t,s),debug:xe("debug",t,s)};return Ae.set(t,[s,r]),r}const Re=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var $e,Ie,Oe;class qe{constructor(e,t,s){this.iterator=e,$e.set(this,void 0),this.controller=t,f(this,$e,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?Ee(s):console;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new w("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new w("Attempted to iterate over a response with no body")}const s=new ke,n=new ge,r=G(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?he(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=_e(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new b(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new b(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new qe((async function*(){if(n)throw new w("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ge,s=G(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(y(e))return;throw e}finally{s||t.abort()}}),t,s)}[($e=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new qe((()=>n(e)),this.controller,m(this,$e,"f")),new qe((()=>n(t)),this.controller,m(this,$e,"f"))]}toReadableStream(){const e=this;let t;return J({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=he(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ke{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function Ce(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return Ee(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):qe.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Te(await s.json(),s)}return await s.text()})();return Ee(e).debug(`[${n}] response parsed`,Re({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Te(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Le extends Promise{constructor(e,t,s=Ce){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,Ie.set(this,void 0),f(this,Ie,e)}_thenUnwrap(e){return new Le(m(this,Ie,"f"),this.responsePromise,(async(t,s)=>Te(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(m(this,Ie,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Ie=new WeakMap;class Pe{constructor(e,t,s,n){Oe.set(this,void 0),f(this,Oe,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new w("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await m(this,Oe,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Oe=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ne extends Le{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await Ce(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class je extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class Me extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...M(this.options.query),after:t}}:null}}class De extends Pe{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...M(this.options.query),after:e}}:null}}const We=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Be(e,t,s){return We(),new File(e,t??"unknown_file",s)}function Ue(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Fe=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],He=async(e,t)=>({...e,body:await Je(e.body,t)}),Xe=new WeakMap;const Je=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=Xe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return Xe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Ke(s,e,t)))),s},Ke=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Be([await s.blob()],Ue(s)));else if(Fe(s))e.append(t,Be([await new Response(K(s)).blob()],Ue(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ue(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Ke(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Ke(e,`${t}[${s}]`,n))))}}},Ge=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Ve(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ge(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Fe(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await Ve(s))}return t}class ze{constructor(e){this._client=e}}function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ye=Object.freeze(Object.create(null)),Ze=(e=Qe)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ye)??Ye)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new w(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},et=Ze(Qe);let tt=class extends ze{list(e,t={},s){return this._client.getAPIList(et`/chat/completions/${e}/messages`,Me,{query:t,...s})}};function st(e){return void 0!==e&&"function"in e&&void 0!==e.function}function nt(e){return"auto-parseable-response-format"===e?.$brand}function rt(e){return"auto-parseable-tool"===e?.$brand}function ot(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new C;if("content_filter"===e.finish_reason)throw new T;return lt(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:rt(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?it(t,e.message.content):null}}}));return{...e,choices:s}}function it(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function at(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>st(e)&&e.function?.name===t.function.name));return st(s)&&(rt(s)||s?.function.strict||!1)}function ct(e){return!!nt(e.response_format)||(e.tools?.some((e=>rt(e)||"function"===e.type&&!0===e.function.strict))??!1)}function lt(e){for(const t of e||[])if("function"!==t.type)throw new w(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const ut=e=>"assistant"===e?.role,dt=e=>"tool"===e?.role;var ht,pt,ft,mt,gt,yt,_t,wt,bt,vt,xt,St,At,Et,Rt,$t,It,Ot,qt,kt,Ct;class Tt{constructor(){ht.add(this),this.controller=new AbortController,pt.set(this,void 0),ft.set(this,(()=>{})),mt.set(this,(()=>{})),gt.set(this,void 0),yt.set(this,(()=>{})),_t.set(this,(()=>{})),wt.set(this,{}),bt.set(this,!1),vt.set(this,!1),xt.set(this,!1),St.set(this,!1),f(this,pt,new Promise(((e,t)=>{f(this,ft,e),f(this,mt,t)}))),f(this,gt,new Promise(((e,t)=>{f(this,yt,e),f(this,_t,t)}))),m(this,pt,"f").catch((()=>{})),m(this,gt,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),m(this,ht,"m",At).bind(this))}),0)}_connected(){this.ended||(m(this,ft,"f").call(this),this._emit("connect"))}get ended(){return m(this,bt,"f")}get errored(){return m(this,vt,"f")}get aborted(){return m(this,xt,"f")}abort(){this.controller.abort()}on(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=m(this,wt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(m(this,wt,"f")[e]||(m(this,wt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{f(this,St,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){f(this,St,!0),await m(this,gt,"f")}_emit(e,...t){if(m(this,bt,"f"))return;"end"===e&&(f(this,bt,!0),m(this,yt,"f").call(this));const s=m(this,wt,"f")[e];if(s&&(m(this,wt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];m(this,St,"f")||s?.length||Promise.reject(e),m(this,mt,"f").call(this,e),m(this,_t,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Lt(e){return"function"==typeof e.parse}pt=new WeakMap,ft=new WeakMap,mt=new WeakMap,gt=new WeakMap,yt=new WeakMap,_t=new WeakMap,wt=new WeakMap,bt=new WeakMap,vt=new WeakMap,xt=new WeakMap,St=new WeakMap,ht=new WeakSet,At=function(e){if(f(this,vt,!0),e instanceof Error&&"AbortError"===e.name&&(e=new v),e instanceof v)return f(this,xt,!0),this._emit("abort",e);if(e instanceof w)return this._emit("error",e);if(e instanceof Error){const t=new w(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new w(String(e)))};const Pt=10;class Nt extends Tt{constructor(){super(...arguments),Et.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),dt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(ut(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new w("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),m(this,Et,"m",Rt).call(this)}async finalMessage(){return await this.done(),m(this,Et,"m",$t).call(this)}async finalFunctionToolCall(){return await this.done(),m(this,Et,"m",It).call(this)}async finalFunctionToolCallResult(){return await this.done(),m(this,Et,"m",Ot).call(this)}async totalUsage(){return await this.done(),m(this,Et,"m",qt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=m(this,Et,"m",$t).call(this);t&&this._emit("finalMessage",t);const s=m(this,Et,"m",Rt).call(this);s&&this._emit("finalContent",s);const n=m(this,Et,"m",It).call(this);n&&this._emit("finalFunctionToolCall",n);const r=m(this,Et,"m",Ot).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",m(this,Et,"m",qt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Et,"m",kt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ot(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:c=Pt}=s||{},l=t.tools.map((e=>{if(rt(e)){if(!e.$callback)throw new w("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of l)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?l.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(a&&a!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let i;try{i=Lt(o)?await o.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const c=await o.function(i,this),l=m(this,Et,"m",Ct).call(this,c);if(this._addMessage({role:n,tool_call_id:t,content:l}),a)return}}}}Et=new WeakSet,Rt=function(){return m(this,Et,"m",$t).call(this).content??null},$t=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(ut(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new w("stream ended without producing a ChatCompletionMessage with role=assistant")},It=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(ut(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},Ot=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(dt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},qt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},kt=function(e){if(null!=e.n&&e.n>1)throw new w("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},Ct=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class jt extends Nt{static runTools(e,t,s){const n=new jt,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),ut(e)&&e.content&&this._emit("content",e.content)}}const Mt=1,Dt=2,Wt=4,Bt=8,Ut=16,Ft=32,Ht=64,Xt=128,Jt=256,Kt=511;class Gt extends Error{}class Vt extends Error{}const zt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Gt(`${e} at position ${n}`)},o=e=>{throw new Vt(`${e} at position ${n}`)},i=()=>(d(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ut&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Ft&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Ft&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||Xt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Jt&t&&1{const i=n;let a=!1;for(n++;n{n++,d();const o={};try{for(;"}"!==e[n];){if(d(),n>=s&&Bt&t)return o;const r=a();d(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Bt&t)return o;throw e}d(),","===e[n]&&n++}}catch(e){if(Bt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),d(),","===e[n]&&n++}catch(e){if(Wt&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Dt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Dt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Dt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;nfunction(e,t=Kt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return zt(e.trim(),t)}(e,Kt^Dt);var Yt,Zt,es,ts,ss,ns,rs,os,is,as,cs,ls;class us extends Nt{constructor(e){super(),Yt.add(this),Zt.set(this,void 0),es.set(this,void 0),ts.set(this,void 0),f(this,Zt,e),f(this,es,[])}get currentChatCompletionSnapshot(){return m(this,ts,"f")}static fromReadableStream(e){const t=new us(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new us(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)m(this,Yt,"m",rs).call(this,e);if(r.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),m(this,Yt,"m",ss).call(this),this._connected();const n=qe.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(m(this,Yt,"m",as).call(this)),m(this,Yt,"m",rs).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new v;return this._addChatCompletion(m(this,Yt,"m",as).call(this))}[(Zt=new WeakMap,es=new WeakMap,ts=new WeakMap,Yt=new WeakSet,ss=function(){this.ended||f(this,ts,void 0)},ns=function(e){let t=m(this,es,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},m(this,es,"f")[e.index]=t,t)},rs=function(e){if(this.ended)return;const t=m(this,Yt,"m",ls).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=m(this,Yt,"m",ns).call(this,e);e.finish_reason&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(m(this,Yt,"m",is).call(this,e),null!=n.current_tool_call_index&&m(this,Yt,"m",os).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},os=function(e,t){if(m(this,Yt,"m",ns).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=m(this,Zt,"f")?.tools?.find((e=>st(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:rt(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},is=function(e){const t=m(this,Yt,"m",ns).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=m(this,Yt,"m",cs).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},as=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,ts,"f");if(!e)throw new w("request ended without sending any chunks");return f(this,ts,void 0),f(this,es,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new w(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...l}=t,u=t.role;if(!u)throw new w(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new w(`missing function_call.arguments for choice ${n}`);if(!c)throw new w(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...l,role:u,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:l,...u}=r||{};if(null==i)throw new w(`missing choices[${n}].tool_calls[${s}].id\n${ds(e)}`);if(null==o)throw new w(`missing choices[${n}].tool_calls[${s}].type\n${ds(e)}`);if(null==l)throw new w(`missing choices[${n}].tool_calls[${s}].function.name\n${ds(e)}`);if(null==c)throw new w(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ds(e)}`);return{...a,id:i,type:o,function:{...u,name:l,arguments:c}}}))}}:{...o,message:{...l,content:i,role:u,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&ct(t)?ot(e,t):{...e,choices:e.choices.map((e=>(lt(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,m(this,Zt,"f"))},cs=function(){const e=m(this,Zt,"f")?.response_format;return nt(e)?e:null},ls=function(e){var t,s,n,r;let o=m(this,ts,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=f(this,ts,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:c,logprobs:l=null,...u}of e.choices){let e=o.choices[c];if(e||(e=o.choices[c]={finish_reason:a,index:c,message:{},logprobs:l,...u}),l)if(e.logprobs){const{content:n,refusal:r,...o}=l;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},l);if(a&&(e.finish_reason=a,m(this,Zt,"f")&&ct(m(this,Zt,"f")))){if("length"===a)throw new C;if("content_filter"===a)throw new T}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:g,...y}=i;if(Object.assign(e.message,y),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&m(this,Yt,"m",cs).call(this)&&(e.message.parsed=Qt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:o,...i}of g){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),s&&(a.id=s),n&&(a.type=n),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,at(m(this,Zt,"f"),a)&&(a.function.parsed_arguments=Qt(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ds(e){return JSON.stringify(e)}class hs extends us{static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new hs(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ps=class extends ze{constructor(){super(...arguments),this.messages=new tt(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(et`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(et`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new w(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new w(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ot(t,e)))}runTools(e,t){return e.stream?hs.runTools(this._client,e,t):jt.runTools(this._client,e,t)}stream(e,t){return us.createChatCompletion(this._client,e,t)}};ps.Messages=tt;class fs extends ze{constructor(){super(...arguments),this.completions=new ps(this._client)}}fs.Completions=ps;const ms=Symbol("brand.privateNullableHeaders");function*gs(e){if(!e)return;if(ms in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():j(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=j(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const ys=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of gs(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[ms]:!0,values:t,nulls:s}};class _s extends ze{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:ys([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ws extends ze{create(e,t){return this._client.post("/audio/transcriptions",He({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class bs extends ze{create(e,t){return this._client.post("/audio/translations",He({body:e,...t,__metadata:{model:e.model}},this._client))}}class vs extends ze{constructor(){super(...arguments),this.transcriptions=new ws(this._client),this.translations=new bs(this._client),this.speech=new _s(this._client)}}vs.Transcriptions=ws,vs.Translations=bs,vs.Speech=_s;class xs extends ze{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(et`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/batches/${e}/cancel`,t)}}class Ss extends ze{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/assistants/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/assistants/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends ze{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Es extends ze{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Rs=class extends ze{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Es(this._client)}};Rs.Sessions=As,Rs.TranscriptionSessions=Es;class $s extends ze{create(e,t,s){return this._client.post(et`/threads/${e}/messages`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/messages/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/messages`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(et`/threads/${n}/messages/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Is extends ze{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(et`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(et`/threads/${n}/runs/${e}/steps`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const Os=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var qs,ks,Cs,Ts,Ls,Ps,Ns,js,Ms,Ds,Ws,Bs,Us,Fs,Hs,Xs,Js,Ks,Gs,Vs,zs,Qs,Ys;class Zs extends Tt{constructor(){super(...arguments),qs.add(this),Cs.set(this,[]),Ts.set(this,{}),Ls.set(this,{}),Ps.set(this,void 0),Ns.set(this,void 0),js.set(this,void 0),Ms.set(this,void 0),Ds.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0)}[(Cs=new WeakMap,Ts=new WeakMap,Ls=new WeakMap,Ps=new WeakMap,Ns=new WeakMap,js=new WeakMap,Ms=new WeakMap,Ds=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,qs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new ks;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=qe.fromReadableStream(e,this.controller);for await(const e of n)m(this,qs,"m",Hs).call(this,e);if(n.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}toReadableStream(){return new qe(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.submitToolOutputs(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static createThreadAssistantStream(e,t,s){const n=new ks;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new ks;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return m(this,Bs,"f")}currentRun(){return m(this,Us,"f")}currentMessageSnapshot(){return m(this,Ps,"f")}currentRunStepSnapshot(){return m(this,Fs,"f")}async finalRunSteps(){return await this.done(),Object.values(m(this,Ts,"f"))}async finalMessages(){return await this.done(),Object.values(m(this,Ls,"f"))}async finalRun(){if(await this.done(),!m(this,Ns,"f"))throw Error("Final run was not received.");return m(this,Ns,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of o)m(this,qs,"m",Hs).call(this,e);if(o.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...s,stream:!0},i=await e.create(t,o,{...n,signal:this.controller.signal});this._connected();for await(const e of i)m(this,qs,"m",Hs).call(this,e);if(i.controller.signal?.aborted)throw new v;return this._addRun(m(this,qs,"m",Xs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!D(t)||!D(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!D(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}ks=Zs,Hs=function(e){if(!this.ended)switch(f(this,Bs,e),m(this,qs,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":m(this,qs,"m",Ys).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":m(this,qs,"m",Ks).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":m(this,qs,"m",Js).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Xs=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");if(!m(this,Ns,"f"))throw Error("Final run has not been received");return m(this,Ns,"f")},Js=function(e){const[t,s]=m(this,qs,"m",zs).call(this,e,m(this,Ps,"f"));f(this,Ps,t),m(this,Ls,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=m(this,js,"f")){if(m(this,Ms,"f"))switch(m(this,Ms,"f").type){case"text":this._emit("textDone",m(this,Ms,"f").text,m(this,Ps,"f"));break;case"image_file":this._emit("imageFileDone",m(this,Ms,"f").image_file,m(this,Ps,"f"))}f(this,js,s.index)}f(this,Ms,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==m(this,js,"f")){const t=e.data.content[m(this,js,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,m(this,Ps,"f"));break;case"text":this._emit("textDone",t.text,m(this,Ps,"f"))}}m(this,Ps,"f")&&this._emit("messageDone",e.data),f(this,Ps,void 0)}},Ks=function(e){const t=m(this,qs,"m",Vs).call(this,e);switch(f(this,Fs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==m(this,Ds,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(m(this,Ws,"f")&&this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ds,e.index),f(this,Ws,t.step_details.tool_calls[e.index]),m(this,Ws,"f")&&this._emit("toolCallCreated",m(this,Ws,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":f(this,Fs,void 0);"tool_calls"==e.data.step_details.type&&m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){m(this,Cs,"f").push(e),this._emit("event",e)},Vs=function(e){switch(e.event){case"thread.run.step.created":return m(this,Ts,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=m(this,Ts,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=ks.accumulateDelta(t,s.delta);m(this,Ts,"f")[e.data.id]=n}return m(this,Ts,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":m(this,Ts,"f")[e.data.id]=e.data}if(m(this,Ts,"f")[e.data.id])return m(this,Ts,"f")[e.data.id];throw new Error("No snapshot available")},zs=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=m(this,qs,"m",Qs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Qs=function(e,t){return ks.accumulateDelta(t,e)},Ys=function(e){switch(f(this,Us,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":f(this,Ns,e.data),m(this,Ws,"f")&&(this._emit("toolCallDone",m(this,Ws,"f")),f(this,Ws,void 0))}};let en=class extends ze{constructor(){super(...arguments),this.steps=new Is(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(et`/threads/${n}/runs/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/threads/${e}/runs`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(et`/threads/${n}/runs/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Zs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(et`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Zs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};en.Steps=Is;class tn extends ze{constructor(){super(...arguments),this.runs=new en(this._client),this.messages=new $s(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/threads/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(et`/threads/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Zs.createThreadAssistantStream(e,this._client.beta.threads,t)}}tn.Runs=en,tn.Messages=$s;class sn extends ze{constructor(){super(...arguments),this.realtime=new Rs(this._client),this.assistants=new Ss(this._client),this.threads=new tn(this._client)}}sn.Realtime=Rs,sn.Assistants=Ss,sn.Threads=tn;class nn extends ze{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class rn extends ze{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}/content`,{...s,headers:ys([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let on=class extends ze{constructor(){super(...arguments),this.content=new rn(this._client)}create(e,t,s){return this._client.post(et`/containers/${e}/files`,He({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(et`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(et`/containers/${e}/files`,Me,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(et`/containers/${n}/files/${e}`,{...s,headers:ys([{Accept:"*/*"},s?.headers])})}};on.Content=rn;class an extends ze{constructor(){super(...arguments),this.files=new on(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(et`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",Me,{query:e,...t})}delete(e,t){return this._client.delete(et`/containers/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}}an.Files=on;class cn extends ze{create(e,t,s){const{include:n,...r}=t;return this._client.post(et`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(et`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(et`/conversations/${e}/items`,De,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(et`/conversations/${n}/items/${e}`,s)}}class ln extends ze{constructor(){super(...arguments),this.items=new cn(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(et`/conversations/${e}`,t)}update(e,t,s){return this._client.post(et`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(et`/conversations/${e}`,t)}}ln.Items=cn;class un extends ze{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&Ee(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(Ee(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new S({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class mn extends ze{}let gn=class extends ze{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yn extends ze{constructor(){super(...arguments),this.graders=new gn(this._client)}}yn.Graders=gn;class _n extends ze{create(e,t,s){return this._client.getAPIList(et`/fine_tuning/checkpoints/${e}/permissions`,je,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(et`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(et`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let wn=class extends ze{constructor(){super(...arguments),this.permissions=new _n(this._client)}};wn.Permissions=_n;class bn extends ze{list(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/checkpoints`,Me,{query:t,...s})}}class vn extends ze{constructor(){super(...arguments),this.checkpoints=new bn(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(et`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",Me,{query:e,...t})}cancel(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(et`/fine_tuning/jobs/${e}/events`,Me,{query:t,...s})}pause(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(et`/fine_tuning/jobs/${e}/resume`,t)}}vn.Checkpoints=bn;class xn extends ze{constructor(){super(...arguments),this.methods=new mn(this._client),this.jobs=new vn(this._client),this.checkpoints=new wn(this._client),this.alpha=new yn(this._client)}}xn.Methods=mn,xn.Jobs=vn,xn.Checkpoints=wn,xn.Alpha=yn;class Sn extends ze{}class An extends ze{constructor(){super(...arguments),this.graderModels=new Sn(this._client)}}An.GraderModels=Sn;class En extends ze{createVariation(e,t){return this._client.post("/images/variations",He({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",He({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Rn extends ze{retrieve(e,t){return this._client.get(et`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",je,e)}delete(e,t){return this._client.delete(et`/models/${e}`,t)}}class $n extends ze{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class In extends ze{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class On extends ze{constructor(){super(...arguments),this.clientSecrets=new In(this._client)}}function qn(e,t){return t&&function(e){if(nt(e.text?.format))return!0;return!1}(t)?kn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function kn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Tn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:Cn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||Ln(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function Cn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Tn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function Ln(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Pn,Nn,jn,Mn,Dn,Wn,Bn,Un;On.ClientSecrets=In;class Fn extends Tt{constructor(e){super(),Pn.add(this),Nn.set(this,void 0),jn.set(this,void 0),Mn.set(this,void 0),f(this,Nn,e)}static createResponse(e,t,s){const n=new Fn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),m(this,Pn,"m",Dn).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)m(this,Pn,"m",Wn).call(this,e,o);if(r.controller.signal?.aborted)throw new v;return m(this,Pn,"m",Bn).call(this)}[(Nn=new WeakMap,jn=new WeakMap,Mn=new WeakMap,Pn=new WeakSet,Dn=function(){this.ended||f(this,jn,void 0)},Wn=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=m(this,Pn,"m",Un).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new w(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new w(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Bn=function(){if(this.ended)throw new w("stream has ended, this shouldn't happen");const e=m(this,jn,"f");if(!e)throw new w("request ended without sending any events");f(this,jn,void 0);const t=function(e,t){return qn(e,t)}(e,m(this,Nn,"f"));return f(this,Mn,t),t},Un=function(e){let t=m(this,jn,"f");if(!t){if("response.created"!==e.type)throw new w(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=f(this,jn,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new w(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new w(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new w(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new w(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":f(this,jn,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=m(this,Mn,"f");if(!e)throw new w("stream ended without producing a ChatCompletion");return e}}class Hn extends ze{list(e,t={},s){return this._client.getAPIList(et`/responses/${e}/input_items`,Me,{query:t,...s})}}class Xn extends ze{constructor(){super(...arguments),this.inputItems=new Hn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}retrieve(e,t={},s){return this._client.get(et`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Ln(e),e)))}delete(e,t){return this._client.delete(et`/responses/${e}`,{...t,headers:ys([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>kn(t,e)))}stream(e,t){return Fn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(et`/responses/${e}/cancel`,t)}}Xn.InputItems=Hn;class Jn extends ze{create(e,t,s){return this._client.post(et`/uploads/${e}/parts`,He({body:t,...s},this._client))}}class Kn extends ze{constructor(){super(...arguments),this.parts=new Jn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(et`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(et`/uploads/${e}/complete`,{body:t,...s})}}Kn.Parts=Jn;class Gn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/file_batches`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/file_batches/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(et`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(et`/vector_stores/${n}/file_batches/${e}/files`,Me,{query:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Vn extends ze{create(e,t,s){return this._client.post(et`/vector_stores/${e}/files`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(et`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(et`/vector_stores/${e}/files`,Me,{query:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(et`/vector_stores/${n}/files/${e}`,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=ys([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await W(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(et`/vector_stores/${n}/files/${e}/content`,je,{...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class zn extends ze{constructor(){super(...arguments),this.files=new Vn(this._client),this.fileBatches=new Gn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(et`/vector_stores/${e}`,{body:t,...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",Me,{query:e,...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(et`/vector_stores/${e}`,{...t,headers:ys([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(et`/vector_stores/${e}/search`,je,{body:t,method:"post",...s,headers:ys([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Qn,Yn,Zn,er,tr,sr,nr;zn.Files=Vn,zn.FileBatches=Gn;class rr extends ze{constructor(){super(...arguments),Qn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");m(this,Qn,"m",Yn).call(this,s);const r=ys([t]).values,o=m(this,Qn,"m",Zn).call(this,r,"webhook-signature"),i=m(this,Qn,"m",Zn).call(this,r,"webhook-timestamp"),a=m(this,Qn,"m",Zn).call(this,r,"webhook-id"),c=parseInt(i,10);if(isNaN(c))throw new L("Invalid webhook timestamp format");const l=Math.floor(Date.now()/1e3);if(l-c>n)throw new L("Webhook timestamp is too old");if(c>l+n)throw new L("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new L("The given webhook signature does not match the expected signature")}}Qn=new WeakSet,Yn=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Zn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class or{constructor({baseURL:e=Os("OPENAI_BASE_URL"),apiKey:t=Os("OPENAI_API_KEY"),organization:s=Os("OPENAI_ORG_ID")??null,project:n=Os("OPENAI_PROJECT_ID")??null,webhookSecret:r=Os("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(er.add(this),sr.set(this,void 0),this.completions=new nn(this),this.chat=new fs(this),this.embeddings=new un(this),this.files=new fn(this),this.images=new En(this),this.audio=new vs(this),this.moderations=new $n(this),this.models=new Rn(this),this.fineTuning=new xn(this),this.graders=new An(this),this.vectorStores=new zn(this),this.webhooks=new rr(this),this.beta=new sn(this),this.batches=new xs(this),this.uploads=new Kn(this),this.responses=new Xn(this),this.realtime=new On(this),this.conversations=new ln(this),this.evals=new pn(this),this.containers=new an(this),void 0===t)throw new w("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:s,project:n,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new w("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??tr.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=be(i.logLevel,"ClientOptions.logLevel",this)??be(Os("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),f(this,sr,V),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return ys([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return le(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${B}`}defaultIdempotencyKey(){return`stainless-node-retry-${g()}`}makeStatusError(e,t,s,n){return b.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof w)throw e;throw new w(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new w(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!m(this,er,"m",nr).call(this)&&s||this.baseURL,r=(e=>P.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new Le(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:a}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const c="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),l=void 0===s?"":`, retryOf: ${s}`,u=Date.now();if(Ee(this).debug(`[${c}] sending request`,Re({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new v;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(_),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new v;const r=y(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - ${e}`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (${e})`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),this.retryRequest(n,t,s??c);if(Ee(this).info(`[${c}] connection ${r?"timed out":"failed"} - error; no more retries left`),Ee(this).debug(`[${c}] connection ${r?"timed out":"failed"} (error; no more retries left)`,Re({retryOfRequestLogID:s,url:i,durationMs:p-u,message:h.message})),r)throw new S;throw new x({cause:h})}const f=`[${c}${l}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(h.body),Ee(this).info(`${f} - ${e}`),Ee(this).debug(`[${c}] response error (${e})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(n,t,s??c,h.headers)}const r=e?"error; no more retries left":"error; not retryable";Ee(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>_(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;Ee(this).debug(`[${c}] response error (${r})`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return Ee(this).info(f),Ee(this).debug(`[${c}] response start`,Re({retryOfRequestLogID:s,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:n,controller:d,requestLogID:c,retryOfRequestLogID:s,startTime:u}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ne(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await W(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new w(`${e} must be an integer`);if(t<0)throw new w(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:l}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&l instanceof globalThis.ReadableStream&&{duplex:"half"},...l&&{body:l},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=ys([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...X??(X=U()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=ys([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:K(e)}:m(this,sr,"f").call(this,{body:e,headers:s})}}tr=or,sr=new WeakMap,er=new WeakSet,nr=function(){return"https://api.openai.com/v1"!==this.baseURL},or.OpenAI=tr,or.DEFAULT_TIMEOUT=6e5,or.OpenAIError=w,or.APIError=b,or.APIConnectionError=x,or.APIConnectionTimeoutError=S,or.APIUserAbortError=v,or.NotFoundError=$,or.ConflictError=I,or.RateLimitError=q,or.BadRequestError=A,or.AuthenticationError=E,or.InternalServerError=k,or.PermissionDeniedError=R,or.UnprocessableEntityError=O,or.InvalidWebhookSignatureError=L,or.toFile=async function(e,t,s){if(We(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ge(e))(e=await e))return e instanceof File?e:Be([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Be(await Ve(n),t,s)}const n=await Ve(e);if(t||(t=Ue(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Be(n,t,s)},or.Completions=nn,or.Chat=fs,or.Embeddings=un,or.Files=fn,or.Images=En,or.Audio=vs,or.Moderations=$n,or.Models=Rn,or.FineTuning=xn,or.Graders=An,or.VectorStores=zn,or.Webhooks=rr,or.Beta=sn,or.Batches=xs,or.Uploads=Kn,or.Responses=Xn,or.Realtime=On,or.Conversations=ln,or.Evals=pn,or.Containers=an;const ir={[o.SINGLE_CHOICE]:{name:"single_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SINGLE_CHOICE]},correct_answer:{type:"object",properties:{index:{type:"integer"}},required:["index"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MULTIPLE_CHOICE]:{name:"multiple_choice_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MULTIPLE_CHOICE]},correct_answer:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.TRUE_FALSE]:{name:"true_false_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.TRUE_FALSE]},correct_answer:{type:"boolean"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.SHORT_TEXT]:{name:"short_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SHORT_TEXT]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.NUMERICAL]:{name:"numerical_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.NUMERICAL]},correct_answer:{type:"number"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.ESSAY]:{name:"essay_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ESSAY]},correct_answer:{type:"string"}},required:["question_type","correct_answer"],additionalProperties:!1}},[o.MATCH]:{name:"match_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.MATCH]},correct_answers:{type:"array",items:{type:"object",properties:{sub_question_index:{type:"integer"},option_index:{type:"integer"}},required:["sub_question_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.SELECT_MISSING_WORD]:{name:"select_missing_word_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.SELECT_MISSING_WORD]},correct_answers:{type:"array",items:{type:"object",properties:{drop_down_index:{type:"integer"},option_index:{type:"integer"}},required:["drop_down_index","option_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.DRAG_DROP_TEXT]:{name:"drag_drop_text_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.DRAG_DROP_TEXT]},correct_answers:{type:"array",items:{type:"object",properties:{blank_index:{type:"integer"},draggable_index:{type:"integer"}},required:["blank_index","draggable_index"],additionalProperties:!1}}},required:["question_type","correct_answers"],additionalProperties:!1}},[o.ORDERING]:{name:"ordering_response",strict:!0,schema:{type:"object",properties:{question_type:{type:"string",enum:[o.ORDERING]},correct_order:{type:"object",properties:{indexes:{type:"array",items:{type:"integer"}}},required:["indexes"],additionalProperties:!1}},required:["question_type","correct_order"],additionalProperties:!1}},[o.UNKNOWN]:void 0};function ar(e){const t=[],s=Array.from(e.querySelectorAll("tr")),n=[];s.map((e=>{const s=Array.from(e.querySelectorAll("td, th")).map(((e,t)=>{var s;const r=null===(s=e.textContent)||void 0===s?void 0:s.trim();return n[t]=Math.max(n[t]||0,(null==r?void 0:r.length)||0),null!=r?r:""}));t.push(s)}));const r=t[0].length,o=n.reduce(((e,t)=>e+t),0)+3*(r-1),i="\n"+Array(o).fill("-").join("")+"\n",a=t.map((e=>e.map(((e,t)=>e.padEnd(n[t]," "))).join(" | ")));return a.shift()+i+a.join("\n")}function cr(t,s){t.title&&e("Copied to clipboard");let n="";if(s.response&&s.questionQuery){const e=s.questionQuery,t=s.response;if(e.question_type===t.question_type)switch(t.question_type){case o.SINGLE_CHOICE:{const s=t,r=e.answer_options.find((e=>e.index===s.correct_answer.index));n=r?r.text:"";break}case o.MULTIPLE_CHOICE:{const s=e;n=t.correct_answer.indexes.map((e=>{const t=s.answer_options.find((t=>t.index===e));return t?t.text:""})).filter(Boolean).join("\n");break}case o.TRUE_FALSE:n=t.correct_answer?"True":"False";break;case o.SHORT_TEXT:case o.ESSAY:n=t.correct_answer;break;case o.NUMERICAL:n=t.correct_answer.toString();break;case o.MATCH:{const s=e;n=t.correct_answers.map((e=>{const t=s.sub_questions.find((t=>t.index===e.sub_question_index)),n=s.options.find((t=>t.index===e.option_index));return`${(null==t?void 0:t.text)||`Sub ${e.sub_question_index}`} -> ${(null==n?void 0:n.text)||`Option ${e.option_index}`}`})).join("\n");break}case o.SELECT_MISSING_WORD:{const s=e;n=t.correct_answers.map((e=>{const t=s.drop_downs.find((t=>t.index===e.drop_down_index)),n=null==t?void 0:t.options.find((t=>t.index===e.option_index));return`Blank ${e.drop_down_index}: ${(null==n?void 0:n.text)||`Option ${e.option_index}`}`})).join("\n");break}case o.DRAG_DROP_TEXT:{const s=e;n=t.correct_answers.map((e=>{const t=s.draggables.find((t=>t.index===e.draggable_index));return`Blank ${e.blank_index}: ${(null==t?void 0:t.text)||`Draggable ${e.draggable_index}`}`})).join("\n");break}case o.ORDERING:{const s=e;n=t.correct_order.indexes.map(((e,t)=>{const n=s.items.find((t=>t.index===e));return`${t+1}. ${(null==n?void 0:n.text)||`Item ${e}`}`})).join("\n");break}}}n||(n=s.response?JSON.stringify(s.response,null,2):s.rawResponse?s.rawResponse:""),navigator.clipboard.writeText(n)}function lr(e,t,s){const n=t[0];if(1!==t.length||!function(e){const t=e.getAttribute("contenteditable");return"string"==typeof t&&"false"!==t}(n))return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=r.length)return void n.removeEventListener("keydown",t);n.textContent=r.slice(0,++e),n.focus();const o=document.createRange();o.selectNodeContents(n),o.collapse(!1);const i=window.getSelection();null!==i&&(i.removeAllRanges(),i.addRange(o))};n.addEventListener("keydown",t)}else n.textContent=r;return!0}function ur(e,t,s){var n,r;const o=t[0];if(1!==t.length||"number"!==o.type)return!1;const i=null===(r=null===(n=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).match(/\d+([,.]\d+)?/gi))||void 0===n?void 0:n[0])||void 0===r?void 0:r.replace(",",".");if(void 0===i)return!1;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=i.length?o.removeEventListener("keydown",t):("."===i.slice(e,e+1)&&++e,o.value=i.slice(0,++e))};o.addEventListener("keydown",t)}else o.value=i;return!0}function dr(e,t,s){const a=null==t?void 0:t[0];if(!a||"radio"!==a.type)return!1;let c=null;if(s.response&&s.response.question_type===o.SINGLE_CHOICE){const e=s.response.correct_answer.index;e>=0&&e{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),o=n(e?"true":"false",r);c=o.element}else{const o=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value)),a=n(s.rawResponse,o);e.logs&&a.value&&r.bestAnswer(a.value,a.similarity),c=a.element}return c&&(e.mouseover?c.addEventListener("mouseover",(()=>c.click()),{once:!0}):c.click()),!0}function hr(e,t,s){const a=null==t?void 0:t[0];if(!a||"checkbox"!==a.type)return!1;const c=new Set;if(s.response&&s.response.question_type===o.MULTIPLE_CHOICE){const n=s.response,r=new Set(n.correct_answer.indexes);Array.from(t).forEach(((e,t)=>{const s=e;r.has(t)&&c.add(s)})),e.logs&&console.log("Using strict mode multiple choice selection:",n.correct_answer.indexes)}else{const o=s.rawResponse.split("\n"),a=Array.from(t).map((e=>{var t,s;return{element:e,value:i(null!==(s=null===(t=null==e?void 0:e.parentElement)||void 0===t?void 0:t.textContent)&&void 0!==s?s:"")}})).filter((e=>""!==e.value));for(const t of o){const s=n(t,a);e.logs&&s.value&&r.bestAnswer(s.value,s.similarity),c.add(s.element)}}for(const s of Array.from(t)){const t=s,n=t.checked&&!c.has(t)||!t.checked&&c.has(t),r=()=>n&&t.click();e.mouseover?t.addEventListener("mouseover",r,{once:!0}):r()}return!0}function pr(e,t,s){if(0===t.length||"SELECT"!==t[0].tagName)return!1;const o=(s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse).split("\n");e.logs&&r.array(o);for(let s=0;s{var t;return{element:e,value:i(null!==(t=e.textContent)&&void 0!==t?t:"")}})).filter((e=>""!==e.value)),l=n(o[s],c);e.logs&&l.value&&r.bestAnswer(l.value,l.similarity);const u=l.element,d=u.closest("select");null!==d&&(e.mouseover?d.addEventListener("click",(()=>u.selected=!0),{once:!0}):u.selected=!0)}return!0}function fr(e,t,s){const n=t[0];if(1!==t.length||"TEXTAREA"!==n.tagName&&"text"!==n.type)return!1;const r=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){s.preventDefault(),"Backspace"===s.key||e>=r.length?n.removeEventListener("keydown",t):n.value=r.slice(0,++e)};n.addEventListener("keydown",t)}else n.value=r;return!0}function mr(e,t,s){const n=t[0];if(!n.classList.contains("qtype_essay_editor"))return!1;const r=n.querySelector("iframe");if(!(r&&r.contentDocument&&r.contentDocument.body&&r.contentWindow))return!1;const o=r.contentDocument.body.querySelector("p");if(!o)return!1;const i=s.response&&"correct_answer"in s.response?String(s.response.correct_answer):s.rawResponse;if(e.typing){let e=0;const t=function(s){if(s.preventDefault(),"Backspace"===s.key||e>=i.length)return void r.contentWindow.removeEventListener("keydown",t);const n=document.createTextNode(i.charAt(e++));o.appendChild(n);const a=r.contentDocument.createRange();a.selectNodeContents(o),a.collapse(!1);const c=r.contentWindow.getSelection();c&&(c.removeAllRanges(),c.addRange(a)),r.contentWindow.focus()};r.contentWindow.addEventListener("keydown",t)}else o.textContent+=i;return!0}function gr(e,t,s){if(!s.response||s.response.question_type!==o.MATCH)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.sub_question_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function yr(e,t,s){if(!s.response||s.response.question_type!==o.SELECT_MISSING_WORD)return!1;const n=s.response,r=Array.from(t).filter((e=>"SELECT"===e.tagName));for(const t of n.correct_answers){const s=r[t.drop_down_index];if(!s)continue;const n=s.querySelectorAll("option")[t.option_index+1];n&&(e.mouseover?s.addEventListener("click",(()=>n.selected=!0),{once:!0}):n.selected=!0)}return!0}function _r(e,t,s){if(!s.response||s.response.question_type!==o.DRAG_DROP_TEXT)return!1;const n=s.response,r=Array.from(t).filter((e=>e.classList.contains("placeinput")));for(const e of n.correct_answers){const t=r[e.blank_index];if(!t)continue;const s=t.closest(".que");if(!s)continue;const n=s.querySelectorAll(".draghome.unplaced")[e.draggable_index];if(!n)continue;const o=n.className.match(/choice(\d+)/);if(!o)continue;const i=o[1];t.value=i;const a=s.querySelector(`.place${e.blank_index+1}.drop`);a&&(a.textContent=n.textContent)}return!0}function wr(e,t,s){if(!s.response||s.response.question_type!==o.ORDERING)return!1;const n=s.response,r=Array.from(t).find((e=>e.classList.contains("sortablelist")));if(!r)return!0;const i=r.closest(".que");if(!i)return!0;const a=Array.from(r.querySelectorAll("li.sortableitem")),c=[],l=[];for(const e of n.correct_order.indexes){const t=a[e];t&&(c.push(t.id),l.push(t))}const u=i.querySelector('input[type="hidden"][name*="_response_"]');return u&&(u.value=c.join(",")),l.forEach((e=>{r.appendChild(e)})),!0}function br(e){return t(this,void 0,void 0,(function*(){e.config.cursor&&(e.questionElement.style.cursor="wait");const s=function(e){let t=e.innerText;const s=e.querySelectorAll(".accesshide");for(const e of s)t=t.replace(e.innerText,"");const n=e.querySelector(".qtype_essay_editor");n&&(t=t.replace(n.innerText,""));const r=e.querySelector('[role="button"]');r&&(t=t.replace(r.innerText,""));const o=e.querySelectorAll(".qtext table");for(const e of o)t=t.replace(e.innerText,"\n"+ar(e)+"\n");return i(t,!1)}(e.form),n=e.form.querySelectorAll(e.inputQuery),a=yield function(e,s,n){return t(this,void 0,void 0,(function*(){var t;const r=new AbortController,i=setTimeout((()=>r.abort()),1e3*(e.timeoutValue||20)),a=yield p(e,s,n),c=new or({apiKey:e.apiKey,baseURL:e.baseURL,project:e.projectId,dangerouslyAllowBrowser:!0}),l=a.query?a.query.question_type:o.UNKNOWN,u=l!==o.UNKNOWN?ir[l]:void 0,d={model:e.model,messages:a.messages.map((e=>Object.assign({},e))),max_completion_tokens:e.maxTokens||2e3};u&&(d.response_format={type:"json_schema",json_schema:u});const h=yield c.chat.completions.create(function(e,t){if(-1===e.search(/^o\d+/gi))return t;t.temperature&&delete t.temperature,t.top_p&&delete t.top_p;for(const e of t.messages)"system"===e.role&&(e.role="user");return t}(e.model,d),{signal:e.timeout?r.signal:null});clearTimeout(i);const f=null!==(t=h.choices[0].message.content)&&void 0!==t?t:"";let m=null;if(u&&f)try{m=JSON.parse(f)}catch(e){console.error("Failed to parse structured JSON response",e)}return"function"==typeof a.saveResponse&&a.saveResponse(f),{questionQuery:a.query,response:m,rawResponse:f}}))}(e.config,e.questionElement,s).catch((e=>({error:e}))),c="object"==typeof a&&"error"in a;if(e.config.cursor&&(e.questionElement.style.cursor=e.config.infinite||c?"pointer":"initial"),c)console.error(a.error);else switch(e.config.logs&&(r.question(s),r.response(a)),e.config.mode){case"clipboard":!function(e){e.config.infinite||e.removeListener(),cr(e.config,e.gptAnswer)}({config:e.config,questionElement:e.questionElement,gptAnswer:a,removeListener:e.removeListener});break;case"autocomplete":!function(e){e.config.infinite||e.removeListener();const t=[mr,lr,fr,ur,gr,yr,_r,wr,pr,dr,hr];for(const s of t)if(s(e.config,e.inputList,e.gptAnswer))return;cr(e.config,e.gptAnswer)}({config:e.config,gptAnswer:a,inputList:n,questionElement:e.questionElement,removeListener:e.removeListener})}}))}const vr=[],xr=[];function Sr(e){const t=xr.findIndex((t=>t.element===e));if(-1!==t){const e=xr.splice(t,1)[0];e.element.removeEventListener("click",e.fn)}}function Ar(t){if(xr.length>0){for(const e of xr)t.cursor&&(e.element.style.cursor="initial"),e.element.removeEventListener("click",e.fn);return t.title&&e("Removed"),void(xr.length=0)}const s=["checkbox","radio","text","number"].map((e=>`input[type="${e}"]`)).join(",")+", textarea, select, [contenteditable], .qtype_essay_editor, .placeinput, .sortablelist",n=document.querySelectorAll(".formulation");for(const e of n){const n=e.querySelector(".qtext");if(null===n)continue;t.cursor&&(n.style.cursor="pointer");const r=br.bind(null,{config:t,questionElement:n,form:e,inputQuery:s,removeListener:()=>Sr(n)});xr.push({element:n,fn:r}),n.addEventListener("click",r)}t.title&&e("Injected")}chrome.storage.sync.get(["moodleGPT"]).then((function(e){const t=e.moodleGPT;if(!t)throw new Error("Please configure MoodleGPT into the extension");t.code?function(e){document.body.addEventListener("keydown",(function(t){vr.push(t.key),vr.length>e.code.length&&vr.shift(),vr.join("")===e.code&&(vr.length=0,Ar(e))}))}(t):Ar(t)}))})); //# sourceMappingURL=MoodleGPT.js.map diff --git a/extension/MoodleGPT.js.map b/extension/MoodleGPT.js.map index 01fffe3..f382b27 100644 --- a/extension/MoodleGPT.js.map +++ b/extension/MoodleGPT.js.map @@ -1 +1 @@ -{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","normalizedResponse","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","textToCopy","rawResponse","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","json_schema","temperature","top_p","fixeO","structuredResponse","questionQuery","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file +{"version":3,"file":"MoodleGPT.js","sources":["../src/background/utils/title-indications.ts","../node_modules/tslib/tslib.es6.js","../src/background/utils/pick-best-response.ts","../src/background/utils/logs.ts","../src/background/types/question-types.ts","../src/background/utils/normalize-text.ts","../src/background/core/parse-question.ts","../src/background/core/get-content-with-history.ts","../src/background/utils/version-support-images.ts","../src/background/utils/image-to-base64.ts","../node_modules/openai/internal/tslib.mjs","../node_modules/openai/internal/utils/uuid.mjs","../node_modules/openai/internal/errors.mjs","../node_modules/openai/core/error.mjs","../node_modules/openai/internal/utils/values.mjs","../node_modules/openai/internal/utils/sleep.mjs","../node_modules/openai/version.mjs","../node_modules/openai/internal/detect-platform.mjs","../node_modules/openai/internal/shims.mjs","../node_modules/openai/internal/request-options.mjs","../node_modules/openai/internal/qs/formats.mjs","../node_modules/openai/internal/qs/utils.mjs","../node_modules/openai/internal/qs/stringify.mjs","../node_modules/openai/internal/utils/bytes.mjs","../node_modules/openai/internal/decoders/line.mjs","../node_modules/openai/internal/utils/log.mjs","../node_modules/openai/core/streaming.mjs","../node_modules/openai/core/api-promise.mjs","../node_modules/openai/core/pagination.mjs","../node_modules/openai/internal/parse.mjs","../node_modules/openai/internal/uploads.mjs","../node_modules/openai/internal/to-file.mjs","../node_modules/openai/core/resource.mjs","../node_modules/openai/internal/utils/path.mjs","../node_modules/openai/resources/chat/completions/messages.mjs","../node_modules/openai/lib/parser.mjs","../node_modules/openai/lib/chatCompletionUtils.mjs","../node_modules/openai/lib/EventStream.mjs","../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../node_modules/openai/lib/RunnableFunction.mjs","../node_modules/openai/lib/ChatCompletionRunner.mjs","../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../node_modules/openai/lib/ChatCompletionStream.mjs","../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../node_modules/openai/resources/chat/completions/completions.mjs","../node_modules/openai/resources/chat/chat.mjs","../node_modules/openai/internal/headers.mjs","../node_modules/openai/resources/audio/speech.mjs","../node_modules/openai/resources/audio/transcriptions.mjs","../node_modules/openai/resources/audio/translations.mjs","../node_modules/openai/resources/audio/audio.mjs","../node_modules/openai/resources/batches.mjs","../node_modules/openai/resources/beta/assistants.mjs","../node_modules/openai/resources/beta/realtime/sessions.mjs","../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../node_modules/openai/resources/beta/realtime/realtime.mjs","../node_modules/openai/resources/beta/threads/messages.mjs","../node_modules/openai/resources/beta/threads/runs/steps.mjs","../node_modules/openai/internal/utils/base64.mjs","../node_modules/openai/internal/utils/env.mjs","../node_modules/openai/lib/AssistantStream.mjs","../node_modules/openai/resources/beta/threads/runs/runs.mjs","../node_modules/openai/resources/beta/threads/threads.mjs","../node_modules/openai/resources/beta/beta.mjs","../node_modules/openai/resources/completions.mjs","../node_modules/openai/resources/containers/files/content.mjs","../node_modules/openai/resources/containers/files/files.mjs","../node_modules/openai/resources/containers/containers.mjs","../node_modules/openai/resources/conversations/items.mjs","../node_modules/openai/resources/conversations/conversations.mjs","../node_modules/openai/resources/embeddings.mjs","../node_modules/openai/resources/evals/runs/output-items.mjs","../node_modules/openai/resources/evals/runs/runs.mjs","../node_modules/openai/resources/evals/evals.mjs","../node_modules/openai/resources/files.mjs","../node_modules/openai/resources/fine-tuning/methods.mjs","../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../node_modules/openai/resources/graders/grader-models.mjs","../node_modules/openai/resources/graders/graders.mjs","../node_modules/openai/resources/images.mjs","../node_modules/openai/resources/models.mjs","../node_modules/openai/resources/moderations.mjs","../node_modules/openai/resources/realtime/client-secrets.mjs","../node_modules/openai/resources/realtime/realtime.mjs","../node_modules/openai/lib/ResponsesParser.mjs","../node_modules/openai/lib/responses/ResponseStream.mjs","../node_modules/openai/resources/responses/input-items.mjs","../node_modules/openai/resources/responses/responses.mjs","../node_modules/openai/resources/uploads/parts.mjs","../node_modules/openai/resources/uploads/uploads.mjs","../node_modules/openai/resources/vector-stores/file-batches.mjs","../node_modules/openai/lib/Util.mjs","../node_modules/openai/resources/vector-stores/files.mjs","../node_modules/openai/resources/vector-stores/vector-stores.mjs","../node_modules/openai/resources/webhooks.mjs","../node_modules/openai/client.mjs","../src/background/core/utils/question-schemas.ts","../src/background/utils/html-table-to-string.ts","../src/background/core/questions/clipboard.ts","../src/background/core/questions/contenteditable.ts","../src/background/core/questions/number.ts","../src/background/core/questions/radio.ts","../src/background/core/questions/checkbox.ts","../src/background/core/questions/select.ts","../src/background/core/questions/textbox.ts","../src/background/core/questions/atto.ts","../src/background/core/questions/match.ts","../src/background/core/questions/gapselect.ts","../src/background/core/questions/ddwtos.ts","../src/background/core/questions/ordering.ts","../src/background/core/reply.ts","../src/background/core/create-question.ts","../src/background/core/get-response.ts","../src/background/utils/fixe-o.ts","../src/background/core/modes/clipboard.ts","../src/background/core/modes/autocomplete.ts","../src/background/core/code-listener.ts","../src/background/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n",null,null,null,null,null,null,null,null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["titleIndications","text","backTitle","document","title","setTimeout","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","sentenceSimilarity","str1","str2","longerLength","length","matrix","str1WithoutSpaces","replace","str2WithoutSpaces","i","push","j","Math","min","levenshteinDistance","pickBestReponse","answer","arr","bestResponse","element","similarity","obj","SuppressedError","Logs","question","console","log","bestAnswer","round","toPourcentage","array","response","gptAnswer","MoodleQuestionType","normalizeText","toLowerCase","trim","extractOptions","questionElement","inputSelector","options","querySelectorAll","forEach","input","index","labelEl","querySelector","id","_a","textContent","_c","_b","parentElement","SYSTEM_INSTRUCTION_MESSAGE","role","content","getContent","config","imagesElements","includeImages","version","versionNumber","match","Number","isGPTModelGreaterOrEqualTo4","model","contentWithImages","base64Images","Array","from","map","imgEl","imageElement","quality","canvas","createElement","ctx","getContext","remove","img","Image","crossOrigin","onload","width","height","drawImage","base64","toDataURL","onerror","err","src","imageToBase64","base64ImagesResolved","allSettled","status","type","image_url","url","logs","error","reason","createNewHistory","urlParams","URLSearchParams","location","search","host","cmid","get","attempt","history","loadPastHistory","JSON","parse","sessionStorage","moodleGPTHistory","areHistoryFromSameQuiz","a","b","KEYS_TO_COMPARE","key","getContentWithHistory","parsedQuery","normalizedQuestionText","container","closest","classList","contains","checkboxes","radios","question_type","MULTIPLE_CHOICE","question_text","answer_options","SINGLE_CHOICE","TRUE_FALSE","SHORT_TEXT","NUMERICAL","format","initial_text","textarea","payload","ESSAY","subQuestions","firstSelectOptions","rows","subIndex","row","textCell","select","optionIndexCounter","slice","opt","MATCH","sub_questions","selects","dropDowns","dropIndex","optArr","SELECT_MISSING_WORD","drop_downs","dragContainer","draggables","drag","idx","DRAG_DROP_TEXT","itemsContainer","orderingItems","item","getAttribute","ORDERING","items","parseMoodleQuestion","stringify","message","buildResult","historyMsg","historyObj","messages","query","saveResponse","historyToSave","pastHistory","newHistory","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","random","c","toString","isAbortError","name","String","includes","castToError","Error","Object","prototype","cause","stack","OpenAIError","APIError","constructor","headers","super","makeMessage","this","requestID","data","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","isReadonlyArray","maybeObj","x","isObj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","string","escape","$0","parseInt","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","__streamClass","__binaryResponse","contentType","mediaType","split","addRequestID","json","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","PagePromise","request","Page","CursorPage","has_more","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","lastIndexOf","writable","configurable","partialParse","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","Shims.ReadableStreamFrom","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","QuestionSchemas","schema","properties","enum","correct_answer","required","additionalProperties","indexes","correct_answers","sub_question_index","option_index","drop_down_index","blank_index","draggable_index","correct_order","UNKNOWN","htmlTableToString","table","tab","maxColumnsLength","cellsContent","cell","max","headerLineLength","lineSeparationSize","jointure","lineSeparation","mappedTab","padEnd","handleClipboard","textToCopy","questionQuery","q","r","resp","o","Boolean","ans","sub","s","dd","d","rawResponse","clipboard","writeText","handleContentEditable","inputList","contenteditable","isContentEditable","answerText","typing","eventHandler","preventDefault","removeEventListener","focus","range","createRange","selectNodeContents","collapse","selection","getSelection","removeAllRanges","addRange","handleNumber","number","eventHanlder","handleRadio","firstInput","correctInput","isTrue","possibleAnswers","inp","mouseover","click","handleCheckbox","correctElements","correctIndexes","corrects","correct","needAction","checked","action","handleSelect","tagName","correctOption","currentSelect","selected","handleTextbox","handleAtto","iframe","contentDocument","contentWindow","textContainer","textNode","createTextNode","appendChild","handleMatch","el","selectEl","handleGapSelect","handleDragDropText","hiddenInputs","hiddenInput","targetDrag","choiceMatch","className","choiceValue","blankSpan","handleOrdering","sortableList","correctIdsList","orderedItems","reply","style","questionContainer","innerText","accesshideElements","useless","attoText","clearMyChoice","tables","createAndNormalizeQuestion","inputQuery","timeoutControler","timeoutValue","contentHandler","projectId","questionType","targetSchema","requestPayload","max_completion_tokens","maxTokens","json_schema","temperature","top_p","fixeO","structuredResponse","getChatGPTResponse","haveError","infinite","mode","removeListener","clipboardMode","handlers","handler","autoCompleteMode","pressedKeys","setUpMoodleGpt","forms","injectionFunction","chrome","storage","sync","moodleGPT","codeListener"],"mappings":"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","x_google_ignoreList":[1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]} \ No newline at end of file diff --git a/src/background/core/questions/clipboard.ts b/src/background/core/questions/clipboard.ts index 0357915..d648264 100644 --- a/src/background/core/questions/clipboard.ts +++ b/src/background/core/questions/clipboard.ts @@ -1,6 +1,7 @@ import type Config from '../../types/config'; import type GPTAnswer from '../../types/gpt-answer'; import titleIndications from 'background/utils/title-indications'; +import { MoodleQuestionType } from '../../types/question-types'; /** * Copy the response in the clipboard if we can automaticaly fill the question @@ -9,7 +10,125 @@ import titleIndications from 'background/utils/title-indications'; */ function handleClipboard(config: Config, gptAnswer: GPTAnswer) { if (config.title) titleIndications('Copied to clipboard'); - const textToCopy = gptAnswer.rawResponse || JSON.stringify(gptAnswer.response) || ''; + + let textToCopy = ''; + + if (gptAnswer.response && gptAnswer.questionQuery) { + const q = gptAnswer.questionQuery; + const r = gptAnswer.response; + + if (q.question_type === r.question_type) { + switch (r.question_type) { + case MoodleQuestionType.SINGLE_CHOICE: { + const query = q as Extract; + const resp = r as Extract; + const opt = query.answer_options.find(o => o.index === resp.correct_answer.index); + textToCopy = opt ? opt.text : ''; + break; + } + case MoodleQuestionType.MULTIPLE_CHOICE: { + const query = q as Extract< + typeof q, + { question_type: MoodleQuestionType.MULTIPLE_CHOICE } + >; + const resp = r as Extract< + typeof r, + { question_type: MoodleQuestionType.MULTIPLE_CHOICE } + >; + const texts = resp.correct_answer.indexes + .map(idx => { + const opt = query.answer_options.find(o => o.index === idx); + return opt ? opt.text : ''; + }) + .filter(Boolean); + textToCopy = texts.join('\n'); + break; + } + case MoodleQuestionType.TRUE_FALSE: { + const resp = r as Extract; + textToCopy = resp.correct_answer ? 'True' : 'False'; + break; + } + case MoodleQuestionType.SHORT_TEXT: + case MoodleQuestionType.ESSAY: { + const resp = r as Extract< + typeof r, + { question_type: MoodleQuestionType.SHORT_TEXT | MoodleQuestionType.ESSAY } + >; + textToCopy = resp.correct_answer; + break; + } + case MoodleQuestionType.NUMERICAL: { + const resp = r as Extract; + textToCopy = resp.correct_answer.toString(); + break; + } + case MoodleQuestionType.MATCH: { + const query = q as Extract; + const resp = r as Extract; + const matches = resp.correct_answers.map(ans => { + const sub = query.sub_questions.find(s => s.index === ans.sub_question_index); + const opt = query.options.find(o => o.index === ans.option_index); + return `${sub?.text || `Sub ${ans.sub_question_index}`} -> ${opt?.text || `Option ${ans.option_index}`}`; + }); + textToCopy = matches.join('\n'); + break; + } + case MoodleQuestionType.SELECT_MISSING_WORD: { + const query = q as Extract< + typeof q, + { question_type: MoodleQuestionType.SELECT_MISSING_WORD } + >; + const resp = r as Extract< + typeof r, + { question_type: MoodleQuestionType.SELECT_MISSING_WORD } + >; + const answers = resp.correct_answers.map(ans => { + const dd = query.drop_downs.find(d => d.index === ans.drop_down_index); + const opt = dd?.options.find(o => o.index === ans.option_index); + return `Blank ${ans.drop_down_index}: ${opt?.text || `Option ${ans.option_index}`}`; + }); + textToCopy = answers.join('\n'); + break; + } + case MoodleQuestionType.DRAG_DROP_TEXT: { + const query = q as Extract< + typeof q, + { question_type: MoodleQuestionType.DRAG_DROP_TEXT } + >; + const resp = r as Extract; + const answers = resp.correct_answers.map(ans => { + const drag = query.draggables.find(d => d.index === ans.draggable_index); + return `Blank ${ans.blank_index}: ${drag?.text || `Draggable ${ans.draggable_index}`}`; + }); + textToCopy = answers.join('\n'); + break; + } + case MoodleQuestionType.ORDERING: { + const query = q as Extract; + const resp = r as Extract; + const texts = resp.correct_order.indexes.map((idx, i) => { + const item = query.items.find(o => o.index === idx); + return `${i + 1}. ${item?.text || `Item ${idx}`}`; + }); + textToCopy = texts.join('\n'); + break; + } + } + } + } + + // Fallback if empty or types didn't match / no response + if (!textToCopy) { + if (gptAnswer.response) { + textToCopy = JSON.stringify(gptAnswer.response, null, 2); + } else if (gptAnswer.rawResponse) { + textToCopy = gptAnswer.rawResponse; + } else { + textToCopy = ''; + } + } + navigator.clipboard.writeText(textToCopy); } diff --git a/src/background/utils/logs.ts b/src/background/utils/logs.ts index da58766..3cc6ac2 100644 --- a/src/background/utils/logs.ts +++ b/src/background/utils/logs.ts @@ -22,7 +22,6 @@ class Logs { static response(gptAnswer: GPTAnswer) { console.log('Original:\n' + gptAnswer.response); - console.log('Normalized:\n' + gptAnswer.normalizedResponse); } } From 8b45a5d5cecc0a011091b0e5e87e2a6150648589 Mon Sep 17 00:00:00 2001 From: blackicedbear Date: Tue, 5 May 2026 19:55:09 +0200 Subject: [PATCH 12/12] Migrate popup UI to Preact and Tailwind CSS --- extension/popup/index.html | 161 +-- extension/popup/popup.js | 2 +- extension/popup/popup.js.map | 2 +- extension/popup/style.css | 1279 +++++++++++++---- package-lock.json | 771 +++++++++- package.json | 12 +- postcss.config.js | 6 + rollup.config.js | 14 +- .../components/AdvancedSettingsPanel.tsx | 89 ++ src/popup/components/App.tsx | 112 ++ src/popup/components/Header.tsx | 70 + src/popup/components/OperatingMode.tsx | 46 + src/popup/components/OptionsGrid.tsx | 47 + src/popup/components/SettingsPanel.tsx | 86 ++ src/popup/data.ts | 15 - src/popup/gpt-version.ts | 142 -- src/popup/hooks/useConfig.ts | 48 + src/popup/hooks/useModel.ts | 113 ++ src/popup/index.ts | 91 -- src/popup/index.tsx | 7 + src/popup/mode-handler.ts | 42 - src/popup/settings.ts | 21 - src/popup/style.css | 61 + src/popup/utils.ts | 31 - src/popup/version.ts | 61 - tailwind.config.js | 55 + tsconfig.json | 4 +- 27 files changed, 2547 insertions(+), 841 deletions(-) create mode 100644 postcss.config.js create mode 100644 src/popup/components/AdvancedSettingsPanel.tsx create mode 100644 src/popup/components/App.tsx create mode 100644 src/popup/components/Header.tsx create mode 100644 src/popup/components/OperatingMode.tsx create mode 100644 src/popup/components/OptionsGrid.tsx create mode 100644 src/popup/components/SettingsPanel.tsx delete mode 100644 src/popup/data.ts delete mode 100644 src/popup/gpt-version.ts create mode 100644 src/popup/hooks/useConfig.ts create mode 100644 src/popup/hooks/useModel.ts delete mode 100644 src/popup/index.ts create mode 100644 src/popup/index.tsx delete mode 100644 src/popup/mode-handler.ts delete mode 100644 src/popup/settings.ts create mode 100644 src/popup/style.css delete mode 100644 src/popup/utils.ts delete mode 100644 src/popup/version.ts create mode 100644 tailwind.config.js diff --git a/extension/popup/index.html b/extension/popup/index.html index f6dfd7d..b184518 100644 --- a/extension/popup/index.html +++ b/extension/popup/index.html @@ -4,6 +4,14 @@ SparkAssist + + + + + @@ -12,158 +20,7 @@ href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" /> - -
    -
    - SparkAssist Logo -
    -

    SparkAssist

    -

    -
    -
    - - -
    -
    - - -
    -
    - -
    - - - -
    -
    -
    - - - - - Show Advanced Settings - -
    - - Operating Mode -
    -
      -
    • -
    • -
    - -
    - - Options -
    - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    - -
    - -

    {Message}

    - - - - -
    +
    diff --git a/extension/popup/popup.js b/extension/popup/popup.js index 0c5690f..a2ee50b 100644 --- a/extension/popup/popup.js +++ b/extension/popup/popup.js @@ -1,2 +1,2 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";const e={actualMode:"autocomplete"},t=["logs","title","cursor","typing","mouseover","infinite","timeout","history","includeImages"],s=document.querySelector("#mode").querySelectorAll("button");function n(e,t,s,n){return new(s||(s=Promise))((function(r,o){function i(e){try{c(n.next(e))}catch(e){o(e)}}function a(e){try{c(n.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(i,a)}c((n=n.apply(e,t||[])).next())}))}function r(e,t,s,n,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,s),s}function o(e,t,s,n){if("a"===s&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===s?n:"a"===s?n.call(e):n?n.value:t.get(e)}"function"==typeof SuppressedError&&SuppressedError;let i=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return i=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),s=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^s()&15>>+e/4).toString(16)))};function a(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const c=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class l extends Error{}class u extends l{constructor(e,t,s,n){super(`${u.makeMessage(e,t,s)}`),this.status=e,this.headers=n,this.requestID=n?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,s){const n=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):s;return e&&n?`${e} ${n}`:e?`${e} status code (no body)`:n||"(no status code or body)"}static generate(e,t,s,n){if(!e||!n)return new d({message:s,cause:c(t)});const r=t?.error;return 400===e?new f(e,r,s,n):401===e?new m(e,r,s,n):403===e?new g(e,r,s,n):404===e?new y(e,r,s,n):409===e?new w(e,r,s,n):422===e?new _(e,r,s,n):429===e?new b(e,r,s,n):e>=500?new v(e,r,s,n):new u(e,r,s,n)}}class h extends u{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class d extends u{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class p extends d{constructor({message:e}={}){super({message:e??"Request timed out."})}}class f extends u{}class m extends u{}class g extends u{}class y extends u{}class w extends u{}class _ extends u{}class b extends u{}class v extends u{}class x extends l{constructor(){super("Could not parse response content as the length limit was reached")}}class S extends l{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class $ extends Error{constructor(e){super(e)}}const A=/^[a-z][a-z0-9+.-]*:/i;let I=e=>(I=Array.isArray,I(e)),O=I;function k(e){return"object"!=typeof e?{}:e??{}}function R(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const E=e=>new Promise((t=>setTimeout(t,e))),P="5.23.2";const C=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(Deno.build.os),"X-Stainless-Arch":T(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":j(globalThis.process.platform??"unknown"),"X-Stainless-Arch":T(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:s}of e){const e=s.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":P,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const T=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",j=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let q;function M(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function L(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return M({start(){},async pull(e){const{done:s,value:n}=await t.next();s?e.close():e.enqueue(n)},async cancel(){await(t.return?.())}})}function N(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const D=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),W="RFC3986",B=e=>String(e),U={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:B};let F=(e,t)=>(F=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),F(e,t));const X=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),H=1024;function K(e,t){if(I(e)){const s=[];for(let n=0;nString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},V=function(e,t){Array.prototype.push.apply(e,I(t)?t:[t])};let z;const G={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,s,n,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===s)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=H?o.slice(e,e+H):o,s=[];for(let e=0;e=48&&n<=57||n>=65&&n<=90||n>=97&&n<=122||"RFC1738"===r&&(40===n||41===n)?s[s.length]=t.charAt(e):n<128?s[s.length]=X[n]:n<2048?s[s.length]=X[192|n>>6]+X[128|63&n]:n<55296||n>=57344?s[s.length]=X[224|n>>12]+X[128|n>>6&63]+X[128|63&n]:(e+=1,n=65536+((1023&n)<<10|1023&t.charCodeAt(e)),s[s.length]=X[240|n>>18]+X[128|n>>12&63]+X[128|n>>6&63]+X[128|63&n])}i+=s.join("")}return i},encodeValuesOnly:!1,format:W,formatter:B,indices:!1,serializeDate:e=>(z??(z=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const Q={};function Y(e,t,s,n,r,o,i,a,c,l,u,h,d,p,f,m,g,y){let w=e,_=y,b=0,v=!1;for(;void 0!==(_=_.get(Q))&&!v;){const t=_.get(e);if(b+=1,void 0!==t){if(t===b)throw new RangeError("Cyclic object value");v=!0}void 0===_.get(Q)&&(b=0)}if("function"==typeof l?w=l(t,w):w instanceof Date?w=d?.(w):"comma"===s&&I(w)&&(w=K(w,(function(e){return e instanceof Date?d?.(e):e}))),null===w){if(o)return c&&!m?c(t,G.encoder,g,"key",p):t;w=""}if("string"==typeof(x=w)||"number"==typeof x||"boolean"==typeof x||"symbol"==typeof x||"bigint"==typeof x||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(w)){if(c){const e=m?t:c(t,G.encoder,g,"key",p);return[f?.(e)+"="+f?.(c(w,G.encoder,g,"value",p))]}return[f?.(t)+"="+f?.(String(w))]}var x;const S=[];if(void 0===w)return S;let $;if("comma"===s&&I(w))m&&c&&(w=K(w,c)),$=[{value:w.length>0?w.join(",")||null:void 0}];else if(I(l))$=l;else{const e=Object.keys(w);$=u?e.sort(u):e}const A=a?String(t).replace(/\./g,"%2E"):String(t),O=n&&I(w)&&1===w.length?A+"[]":A;if(r&&I(w)&&0===w.length)return O+"[]";for(let t=0;t<$.length;++t){const _=$[t],v="object"==typeof _&&void 0!==_.value?_.value:w[_];if(i&&null===v)continue;const x=h&&a?_.replace(/\./g,"%2E"):_,A=I(w)?"function"==typeof s?s(O,x):O:O+(h?"."+x:"["+x+"]");y.set(e,b);const k=new WeakMap;k.set(Q,y),V(S,Y(v,A,s,n,r,o,i,a,"comma"===s&&m&&I(w)?null:c,l,u,h,d,p,f,m,g,k))}return S}function Z(e,t={}){let s=e;const n=function(e=G){if(void 0!==e.allowEmptyArrays&&"boolean"!=typeof e.allowEmptyArrays)throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(void 0!==e.encodeDotInKeys&&"boolean"!=typeof e.encodeDotInKeys)throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");const t=e.charset||G.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let s=W;if(void 0!==e.format){if(!F(U,e.format))throw new TypeError("Unknown format option provided.");s=e.format}const n=U[s];let r,o=G.filter;if(("function"==typeof e.filter||I(e.filter))&&(o=e.filter),r=e.arrayFormat&&e.arrayFormat in J?e.arrayFormat:"indices"in e?e.indices?"indices":"repeat":G.arrayFormat,"commaRoundTrip"in e&&"boolean"!=typeof e.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");const i=void 0===e.allowDots?1==!!e.encodeDotInKeys||G.allowDots:!!e.allowDots;return{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:G.addQueryPrefix,allowDots:i,allowEmptyArrays:"boolean"==typeof e.allowEmptyArrays?!!e.allowEmptyArrays:G.allowEmptyArrays,arrayFormat:r,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:G.charsetSentinel,commaRoundTrip:!!e.commaRoundTrip,delimiter:void 0===e.delimiter?G.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:G.encode,encodeDotInKeys:"boolean"==typeof e.encodeDotInKeys?e.encodeDotInKeys:G.encodeDotInKeys,encoder:"function"==typeof e.encoder?e.encoder:G.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:G.encodeValuesOnly,filter:o,format:s,formatter:n,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:G.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:G.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:G.strictNullHandling}}(t);let r,o;"function"==typeof n.filter?(o=n.filter,s=o("",s)):I(n.filter)&&(o=n.filter,r=o);const i=[];if("object"!=typeof s||null===s)return"";const a=J[n.arrayFormat],c="comma"===a&&n.commaRoundTrip;r||(r=Object.keys(s)),n.sort&&r.sort(n.sort);const l=new WeakMap;for(let e=0;e0?h+u:""}let ee,te;function se(e){let t;return(ee??(t=new globalThis.TextEncoder,ee=t.encode.bind(t)))(e)}function ne(e){let t;return(te??(t=new globalThis.TextDecoder,te=t.decode.bind(t)))(e)}var re,oe;class ie{constructor(){re.set(this,void 0),oe.set(this,void 0),r(this,re,new Uint8Array),r(this,oe,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?se(e):e;r(this,re,function(e){let t=0;for(const s of e)t+=s.length;const s=new Uint8Array(t);let n=0;for(const t of e)s.set(t,n),n+=t.length;return s}([o(this,re,"f"),t]));const s=[];let n;for(;null!=(n=ae(o(this,re,"f"),o(this,oe,"f")));){if(n.carriage&&null==o(this,oe,"f")){r(this,oe,n.index);continue}if(null!=o(this,oe,"f")&&(n.index!==o(this,oe,"f")+1||n.carriage)){s.push(ne(o(this,re,"f").subarray(0,o(this,oe,"f")-1))),r(this,re,o(this,re,"f").subarray(o(this,oe,"f"))),r(this,oe,null);continue}const e=null!==o(this,oe,"f")?n.preceding-1:n.preceding,t=ne(o(this,re,"f").subarray(0,e));s.push(t),r(this,re,o(this,re,"f").subarray(n.index)),r(this,oe,null)}return s}flush(){return o(this,re,"f").length?this.decode("\n"):[]}}function ae(e,t){for(let s=t??0;s{var n,r;if(e)return n=le,r=e,Object.prototype.hasOwnProperty.call(n,r)?e:void me(s).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(le))}`)};function he(){}function de(e,t,s){return!t||le[e]>le[s]?he:t[e].bind(t)}const pe={error:he,warn:he,info:he,debug:he};let fe=new WeakMap;function me(e){const t=e.logger,s=e.logLevel??"off";if(!t)return pe;const n=fe.get(t);if(n&&n[0]===s)return n[1];const r={error:de("error",t,s),warn:de("warn",t,s),info:de("info",t,s),debug:de("debug",t,s)};return fe.set(t,[s,r]),r}const ge=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var ye,we,_e;class be{constructor(e,t,s){this.iterator=e,ye.set(this,void 0),this.controller=t,r(this,ye,s)}static fromSSEResponse(e,t,s){let n=!1;const r=s?me(s):console;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const n of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new l("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new l("Attempted to iterate over a response with no body")}const s=new ve,n=new ie,r=N(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const s of e){if(null==s)continue;const e=s instanceof ArrayBuffer?new Uint8Array(s):"string"==typeof s?se(s):s;let n,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(n=ce(t));)yield t.slice(0,n),t=t.slice(n)}t.length>0&&(yield t)}(r))for(const t of n.decode(e)){const e=s.decode(t);e&&(yield e)}for(const e of n.flush()){const t=s.decode(e);t&&(yield t)}}(e,t))if(!s)if(n.data.startsWith("[DONE]"))s=!0;else if(null!==n.event&&n.event.startsWith("thread.")){let e;try{e=JSON.parse(n.data)}catch(e){throw console.error("Could not parse message into JSON:",n.data),console.error("From chunk:",n.raw),e}if("error"==n.event)throw new u(void 0,e.error,e.message,void 0);yield{event:n.event,data:e}}else{let t;try{t=JSON.parse(n.data)}catch(e){throw r.error("Could not parse message into JSON:",n.data),r.error("From chunk:",n.raw),e}if(t&&t.error)throw new u(void 0,t.error,void 0,e.headers);yield t}s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}static fromReadableStream(e,t,s){let n=!1;return new be((async function*(){if(n)throw new l("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");n=!0;let s=!1;try{for await(const t of async function*(){const t=new ie,s=N(e);for await(const e of s)for(const s of t.decode(e))yield s;for(const e of t.flush())yield e}())s||t&&(yield JSON.parse(t));s=!0}catch(e){if(a(e))return;throw e}finally{s||t.abort()}}),t,s)}[(ye=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],s=this.iterator(),n=n=>({next:()=>{if(0===n.length){const n=s.next();e.push(n),t.push(n)}return n.shift()}});return[new be((()=>n(e)),this.controller,o(this,ye,"f")),new be((()=>n(t)),this.controller,o(this,ye,"f"))]}toReadableStream(){const e=this;let t;return M({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:s,done:n}=await t.next();if(n)return e.close();const r=se(JSON.stringify(s)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class ve{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,s,n]=function(e,t){const s=e.indexOf(t);if(-1!==s)return[e.substring(0,s),t,e.substring(s+t.length)];return[e,"",""]}(e,":");return n.startsWith(" ")&&(n=n.substring(1)),"event"===t?this.event=n:"data"===t&&this.data.push(n),null}}async function xe(e,t){const{response:s,requestLogID:n,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return me(e).debug("response",s.status,s.url,s.headers,s.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(s,t.controller,e):be.fromSSEResponse(s,t.controller,e);if(204===s.status)return null;if(t.options.__binaryResponse)return s;const n=s.headers.get("content-type"),r=n?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return Se(await s.json(),s)}return await s.text()})();return me(e).debug(`[${n}] response parsed`,ge({retryOfRequestLogID:r,url:s.url,status:s.status,body:i,durationMs:Date.now()-o})),i}function Se(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class $e extends Promise{constructor(e,t,s=xe){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=s,we.set(this,void 0),r(this,we,e)}_thenUnwrap(e){return new $e(o(this,we,"f"),this.responsePromise,(async(t,s)=>Se(e(await this.parseResponse(t,s),s),s.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(o(this,we,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}we=new WeakMap;class Ae{constructor(e,t,s,n){_e.set(this,void 0),r(this,_e,e),this.options=n,this.response=t,this.body=s}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new l("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await o(this,_e,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(_e=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Ie extends $e{constructor(e,t,s){super(e,t,(async(e,t)=>new s(e,t.response,await xe(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Oe extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.object=s.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class ke extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...k(this.options.query),after:t}}:null}}class Re extends Ae{constructor(e,t,s,n){super(e,t,s,n),this.data=s.data||[],this.has_more=s.has_more||!1,this.last_id=s.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...k(this.options.query),after:e}}:null}}const Ee=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Pe(e,t,s){return Ee(),new File(e,t??"unknown_file",s)}function Ce(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Te=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],je=async(e,t)=>({...e,body:await Me(e.body,t)}),qe=new WeakMap;const Me=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,s=qe.get(t);if(s)return s;const n=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,s=new FormData;return s.toString()!==await new e(s).text()}catch{return!0}})();return qe.set(t,n),n}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const s=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Le(s,e,t)))),s},Le=async(e,t,s)=>{if(void 0!==s){if(null==s)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof s||"number"==typeof s||"boolean"==typeof s)e.append(t,String(s));else if(s instanceof Response)e.append(t,Pe([await s.blob()],Ce(s)));else if(Te(s))e.append(t,Pe([await new Response(L(s)).blob()],Ce(s)));else if((e=>e instanceof Blob&&"name"in e)(s))e.append(t,s,Ce(s));else if(Array.isArray(s))await Promise.all(s.map((s=>Le(e,t+"[]",s))));else{if("object"!=typeof s)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${s} instead`);await Promise.all(Object.entries(s).map((([s,n])=>Le(e,`${t}[${s}]`,n))))}}},Ne=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function De(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ne(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Te(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const s of e)t.push(...await De(s))}return t}class We{constructor(e){this._client=e}}function Be(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Ue=Object.freeze(Object.create(null)),Fe=(e=Be)=>function(t,...s){if(1===t.length)return t[0];let n=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(n=!0);const a=s[i];let c=(n?encodeURIComponent:e)(""+a);return i!==s.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ue)??Ue)?.toString)&&(c=a+"",r.push({start:t.length+o.length,length:c.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===s.length?"":c)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let c;for(;null!==(c=a.exec(i));)r.push({start:c.index,length:c[0].length,error:`Value "${c[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,s)=>{const n=" ".repeat(s.start-e),r="^".repeat(s.length);return e=s.start+s.length,t+n+r}),"");throw new l(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},Xe=Fe(Be);let He=class extends We{list(e,t={},s){return this._client.getAPIList(Xe`/chat/completions/${e}/messages`,ke,{query:t,...s})}};function Ke(e){return void 0!==e&&"function"in e&&void 0!==e.function}function Je(e){return"auto-parseable-response-format"===e?.$brand}function Ve(e){return"auto-parseable-tool"===e?.$brand}function ze(e,t){const s=e.choices.map((e=>{if("length"===e.finish_reason)throw new x;if("content_filter"===e.finish_reason)throw new S;return Ze(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:Ve(s)?s.$parseRaw(t.function.arguments):s?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?Ge(t,e.message.content):null}}}));return{...e,choices:s}}function Ge(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function Qe(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const s=e.tools?.find((e=>Ke(e)&&e.function?.name===t.function.name));return Ke(s)&&(Ve(s)||s?.function.strict||!1)}function Ye(e){return!!Je(e.response_format)||(e.tools?.some((e=>Ve(e)||"function"===e.type&&!0===e.function.strict))??!1)}function Ze(e){for(const t of e||[])if("function"!==t.type)throw new l(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const et=e=>"assistant"===e?.role,tt=e=>"tool"===e?.role;var st,nt,rt,ot,it,at,ct,lt,ut,ht,dt,pt,ft,mt,gt,yt,wt,_t,bt,vt,xt;class St{constructor(){st.add(this),this.controller=new AbortController,nt.set(this,void 0),rt.set(this,(()=>{})),ot.set(this,(()=>{})),it.set(this,void 0),at.set(this,(()=>{})),ct.set(this,(()=>{})),lt.set(this,{}),ut.set(this,!1),ht.set(this,!1),dt.set(this,!1),pt.set(this,!1),r(this,nt,new Promise(((e,t)=>{r(this,rt,e),r(this,ot,t)}))),r(this,it,new Promise(((e,t)=>{r(this,at,e),r(this,ct,t)}))),o(this,nt,"f").catch((()=>{})),o(this,it,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),o(this,st,"m",ft).bind(this))}),0)}_connected(){this.ended||(o(this,rt,"f").call(this),this._emit("connect"))}get ended(){return o(this,ut,"f")}get errored(){return o(this,ht,"f")}get aborted(){return o(this,dt,"f")}abort(){this.controller.abort()}on(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t}),this}off(e,t){const s=o(this,lt,"f")[e];if(!s)return this;const n=s.findIndex((e=>e.listener===t));return n>=0&&s.splice(n,1),this}once(e,t){return(o(this,lt,"f")[e]||(o(this,lt,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,s)=>{r(this,pt,!0),"error"!==e&&this.once("error",s),this.once(e,t)}))}async done(){r(this,pt,!0),await o(this,it,"f")}_emit(e,...t){if(o(this,ut,"f"))return;"end"===e&&(r(this,ut,!0),o(this,at,"f").call(this));const s=o(this,lt,"f")[e];if(s&&(o(this,lt,"f")[e]=s.filter((e=>!e.once)),s.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];o(this,pt,"f")||s?.length||Promise.reject(e),o(this,ot,"f").call(this,e),o(this,ct,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function $t(e){return"function"==typeof e.parse}nt=new WeakMap,rt=new WeakMap,ot=new WeakMap,it=new WeakMap,at=new WeakMap,ct=new WeakMap,lt=new WeakMap,ut=new WeakMap,ht=new WeakMap,dt=new WeakMap,pt=new WeakMap,st=new WeakSet,ft=function(e){if(r(this,ht,!0),e instanceof Error&&"AbortError"===e.name&&(e=new h),e instanceof h)return r(this,dt,!0),this._emit("abort",e);if(e instanceof l)return this._emit("error",e);if(e instanceof Error){const t=new l(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new l(String(e)))};const At=10;class It extends St{constructor(){super(...arguments),mt.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),tt(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(et(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new l("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),o(this,mt,"m",gt).call(this)}async finalMessage(){return await this.done(),o(this,mt,"m",yt).call(this)}async finalFunctionToolCall(){return await this.done(),o(this,mt,"m",wt).call(this)}async finalFunctionToolCallResult(){return await this.done(),o(this,mt,"m",_t).call(this)}async totalUsage(){return await this.done(),o(this,mt,"m",bt).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=o(this,mt,"m",yt).call(this);t&&this._emit("finalMessage",t);const s=o(this,mt,"m",gt).call(this);s&&this._emit("finalContent",s);const n=o(this,mt,"m",wt).call(this);n&&this._emit("finalFunctionToolCall",n);const r=o(this,mt,"m",_t).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",o(this,mt,"m",bt).call(this))}async _createChatCompletion(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,mt,"m",vt).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...s,signal:this.controller.signal});return this._connected(),this._addChatCompletion(ze(r,t))}async _runChatCompletion(e,t,s){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,s)}async _runTools(e,t,s){const n="tool",{tool_choice:r="auto",stream:i,...a}=t,c="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:u=At}=s||{},h=t.tools.map((e=>{if(Ve(e)){if(!e.$callback)throw new l("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),d={};for(const e of h)"function"===e.type&&(d[e.function.name||e.function.function.name]=e.function);const p="tools"in t?h.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}if(c&&c!==s){const e=`Invalid tool_call: ${JSON.stringify(s)}. ${JSON.stringify(c)} requested. Please try again`;this._addMessage({role:n,tool_call_id:t,content:e});continue}let a;try{a=$t(i)?await i.parse(r):r}catch(e){const s=e instanceof Error?e.message:String(e);this._addMessage({role:n,tool_call_id:t,content:s});continue}const l=await i.function(a,this),u=o(this,mt,"m",xt).call(this,l);if(this._addMessage({role:n,tool_call_id:t,content:u}),c)return}}}}mt=new WeakSet,gt=function(){return o(this,mt,"m",yt).call(this).content??null},yt=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(et(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new l("stream ended without producing a ChatCompletionMessage with role=assistant")},wt=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(et(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},_t=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(tt(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},bt=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},vt=function(e){if(null!=e.n&&e.n>1)throw new l("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},xt=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class Ot extends It{static runTools(e,t,s){const n=new Ot,r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}_addMessage(e,t=!0){super._addMessage(e,t),et(e)&&e.content&&this._emit("content",e.content)}}const kt=1,Rt=2,Et=4,Pt=8,Ct=16,Tt=32,jt=64,qt=128,Mt=256,Lt=511;class Nt extends Error{}class Dt extends Error{}const Wt=(e,t)=>{const s=e.length;let n=0;const r=e=>{throw new Nt(`${e} at position ${n}`)},o=e=>{throw new Dt(`${e} at position ${n}`)},i=()=>(h(),n>=s&&r("Unexpected end of input"),'"'===e[n]?a():"{"===e[n]?c():"["===e[n]?l():"null"===e.substring(n,n+4)||Ct&t&&s-n<4&&"null".startsWith(e.substring(n))?(n+=4,null):"true"===e.substring(n,n+4)||Tt&t&&s-n<4&&"true".startsWith(e.substring(n))?(n+=4,!0):"false"===e.substring(n,n+5)||Tt&t&&s-n<5&&"false".startsWith(e.substring(n))?(n+=5,!1):"Infinity"===e.substring(n,n+8)||qt&t&&s-n<8&&"Infinity".startsWith(e.substring(n))?(n+=8,1/0):"-Infinity"===e.substring(n,n+9)||Mt&t&&1{const i=n;let a=!1;for(n++;n{n++,h();const o={};try{for(;"}"!==e[n];){if(h(),n>=s&&Pt&t)return o;const r=a();h(),n++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Pt&t)return o;throw e}h(),","===e[n]&&n++}}catch(e){if(Pt&t)return o;r("Expected '}' at end of object")}return n++,o},l=()=>{n++;const s=[];try{for(;"]"!==e[n];)s.push(i()),h(),","===e[n]&&n++}catch(e){if(Et&t)return s;r("Expected ']' at end of array")}return n++,s},u=()=>{if(0===n){"-"===e&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(s){if(Rt&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(s))}}const i=n;for("-"===e[n]&&n++;e[n]&&!",]}".includes(e[n]);)n++;n!=s||Rt&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,n))}catch(s){"-"===e.substring(i,n)&&Rt&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},h=()=>{for(;nfunction(e,t=Lt){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Wt(e.trim(),t)}(e,Lt^Rt);var Ut,Ft,Xt,Ht,Kt,Jt,Vt,zt,Gt,Qt,Yt,Zt;class es extends It{constructor(e){super(),Ut.add(this),Ft.set(this,void 0),Xt.set(this,void 0),Ht.set(this,void 0),r(this,Ft,e),r(this,Xt,[])}get currentChatCompletionSnapshot(){return o(this,Ht,"f")}static fromReadableStream(e){const t=new es(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,s){const n=new es(t);return n._run((()=>n._runChatCompletion(e,{...t,stream:!0},{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createChatCompletion(e,t,s){super._createChatCompletion;const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...s,signal:this.controller.signal});this._connected();for await(const e of r)o(this,Ut,"m",Vt).call(this,e);if(r.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),o(this,Ut,"m",Kt).call(this),this._connected();const n=be.fromReadableStream(e,this.controller);let r;for await(const e of n)r&&r!==e.id&&this._addChatCompletion(o(this,Ut,"m",Qt).call(this)),o(this,Ut,"m",Vt).call(this,e),r=e.id;if(n.controller.signal?.aborted)throw new h;return this._addChatCompletion(o(this,Ut,"m",Qt).call(this))}[(Ft=new WeakMap,Xt=new WeakMap,Ht=new WeakMap,Ut=new WeakSet,Kt=function(){this.ended||r(this,Ht,void 0)},Jt=function(e){let t=o(this,Xt,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},o(this,Xt,"f")[e.index]=t,t)},Vt=function(e){if(this.ended)return;const t=o(this,Ut,"m",Zt).call(this,e);this._emit("chunk",e,t);for(const s of e.choices){const e=t.choices[s.index];null!=s.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",s.delta.content,e.message.content),this._emit("content.delta",{delta:s.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=s.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:s.delta.refusal,snapshot:e.message.refusal}),null!=s.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:s.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=s.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:s.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const n=o(this,Ut,"m",Jt).call(this,e);e.finish_reason&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index));for(const t of s.delta.tool_calls??[])n.current_tool_call_index!==t.index&&(o(this,Ut,"m",Gt).call(this,e),null!=n.current_tool_call_index&&o(this,Ut,"m",zt).call(this,e,n.current_tool_call_index)),n.current_tool_call_index=t.index;for(const t of s.delta.tool_calls??[]){const s=e.message.tool_calls?.[t.index];s?.type&&("function"===s?.type&&this._emit("tool_calls.function.arguments.delta",{name:s.function?.name,index:t.index,arguments:s.function.arguments,parsed_arguments:s.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},zt=function(e,t){if(o(this,Ut,"m",Jt).call(this,e).done_tool_calls.has(t))return;const s=e.message.tool_calls?.[t];if(!s)throw new Error("no tool call snapshot");if(!s.type)throw new Error("tool call snapshot missing `type`");if("function"===s.type){const e=o(this,Ft,"f")?.tools?.find((e=>Ke(e)&&e.function.name===s.function.name));this._emit("tool_calls.function.arguments.done",{name:s.function.name,index:t,arguments:s.function.arguments,parsed_arguments:Ve(e)?e.$parseRaw(s.function.arguments):e?.function.strict?JSON.parse(s.function.arguments):null})}else s.type},Gt=function(e){const t=o(this,Ut,"m",Jt).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const s=o(this,Ut,"m",Yt).call(this);this._emit("content.done",{content:e.message.content,parsed:s?s.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},Qt=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,Ht,"f");if(!e)throw new l("request ended without sending any chunks");return r(this,Ht,void 0),r(this,Xt,[]),function(e,t){const{id:s,choices:n,created:r,model:o,system_fingerprint:i,...a}=e,c={...a,id:s,choices:n.map((({message:t,finish_reason:s,index:n,logprobs:r,...o})=>{if(!s)throw new l(`missing finish_reason for choice ${n}`);const{content:i=null,function_call:a,tool_calls:c,...u}=t,h=t.role;if(!h)throw new l(`missing role for choice ${n}`);if(a){const{arguments:e,name:c}=a;if(null==e)throw new l(`missing function_call.arguments for choice ${n}`);if(!c)throw new l(`missing function_call.name for choice ${n}`);return{...o,message:{content:i,function_call:{arguments:e,name:c},role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}}return c?{...o,index:n,finish_reason:s,logprobs:r,message:{...u,role:h,content:i,refusal:t.refusal??null,tool_calls:c.map(((t,s)=>{const{function:r,type:o,id:i,...a}=t,{arguments:c,name:u,...h}=r||{};if(null==i)throw new l(`missing choices[${n}].tool_calls[${s}].id\n${ts(e)}`);if(null==o)throw new l(`missing choices[${n}].tool_calls[${s}].type\n${ts(e)}`);if(null==u)throw new l(`missing choices[${n}].tool_calls[${s}].function.name\n${ts(e)}`);if(null==c)throw new l(`missing choices[${n}].tool_calls[${s}].function.arguments\n${ts(e)}`);return{...a,id:i,type:o,function:{...h,name:u,arguments:c}}}))}}:{...o,message:{...u,content:i,role:h,refusal:t.refusal??null},finish_reason:s,index:n,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&Ye(t)?ze(e,t):{...e,choices:e.choices.map((e=>(Ze(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(c,t)}(e,o(this,Ft,"f"))},Yt=function(){const e=o(this,Ft,"f")?.response_format;return Je(e)?e:null},Zt=function(e){var t,s,n,i;let a=o(this,Ht,"f");const{choices:c,...l}=e;a?Object.assign(a,l):a=r(this,Ht,{...l,choices:[]});for(const{delta:r,finish_reason:c,index:l,logprobs:u=null,...h}of e.choices){let e=a.choices[l];if(e||(e=a.choices[l]={finish_reason:c,index:l,message:{},logprobs:u,...h}),u)if(e.logprobs){const{content:n,refusal:r,...o}=u;Object.assign(e.logprobs,o),n&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...n)),r&&((s=e.logprobs).refusal??(s.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},u);if(c&&(e.finish_reason=c,o(this,Ft,"f")&&Ye(o(this,Ft,"f")))){if("length"===c)throw new x;if("content_filter"===c)throw new S}if(Object.assign(e,h),!r)continue;const{content:d,refusal:p,function_call:f,role:m,tool_calls:g,...y}=r;if(Object.assign(e.message,y),p&&(e.message.refusal=(e.message.refusal||"")+p),m&&(e.message.role=m),f&&(e.message.function_call?(f.name&&(e.message.function_call.name=f.name),f.arguments&&((n=e.message.function_call).arguments??(n.arguments=""),e.message.function_call.arguments+=f.arguments)):e.message.function_call=f),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&o(this,Ut,"m",Yt).call(this)&&(e.message.parsed=Bt(e.message.content))),g){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:s,type:n,function:r,...a}of g){const c=(i=e.message.tool_calls)[t]??(i[t]={});Object.assign(c,a),s&&(c.id=s),n&&(c.type=n),r&&(c.function??(c.function={name:r.name??"",arguments:""})),r?.name&&(c.function.name=r.name),r?.arguments&&(c.function.arguments+=r.arguments,Qe(o(this,Ft,"f"),c)&&(c.function.parsed_arguments=Bt(c.function.arguments)))}}}return a},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("chunk",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ts(e){return JSON.stringify(e)}class ss extends es{static fromReadableStream(e){const t=new ss(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,s){const n=new ss(t),r={...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"runTools"}};return n._run((()=>n._runTools(e,t,r))),n}}let ns=class extends We{constructor(){super(...arguments),this.messages=new He(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(Xe`/chat/completions/${e}`,t)}update(e,t,s){return this._client.post(Xe`/chat/completions/${e}`,{body:t,...s})}list(e={},t){return this._client.getAPIList("/chat/completions",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new l(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new l(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>ze(t,e)))}runTools(e,t){return e.stream?ss.runTools(this._client,e,t):Ot.runTools(this._client,e,t)}stream(e,t){return es.createChatCompletion(this._client,e,t)}};ns.Messages=He;class rs extends We{constructor(){super(...arguments),this.completions=new ns(this._client)}}rs.Completions=ns;const os=Symbol("brand.privateNullableHeaders");function*is(e){if(!e)return;if(os in e){const{values:t,nulls:s}=e;yield*t.entries();for(const e of s)yield[e,null];return}let t,s=!1;e instanceof Headers?t=e.entries():O(e)?t=e:(s=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const n=O(e[1])?e[1]:[e[1]];let r=!1;for(const e of n)void 0!==e&&(s&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const as=e=>{const t=new Headers,s=new Set;for(const n of e){const e=new Set;for(const[r,o]of is(n)){const n=r.toLowerCase();e.has(n)||(t.delete(r),e.add(n)),null===o?(t.delete(r),s.add(n)):(t.append(r,o),s.delete(n))}}return{[os]:!0,values:t,nulls:s}};class cs extends We{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:as([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class ls extends We{create(e,t){return this._client.post("/audio/transcriptions",je({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class us extends We{create(e,t){return this._client.post("/audio/translations",je({body:e,...t,__metadata:{model:e.model}},this._client))}}class hs extends We{constructor(){super(...arguments),this.transcriptions=new ls(this._client),this.translations=new us(this._client),this.speech=new cs(this._client)}}hs.Transcriptions=ls,hs.Translations=us,hs.Speech=cs;class ds extends We{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/batches/${e}/cancel`,t)}}class ps extends We{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/assistants/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/assistants/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class fs extends We{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class ms extends We{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let gs=class extends We{constructor(){super(...arguments),this.sessions=new fs(this._client),this.transcriptionSessions=new ms(this._client)}};gs.Sessions=fs,gs.TranscriptionSessions=ms;class ys extends We{create(e,t,s){return this._client.post(Xe`/threads/${e}/messages`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/messages/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/messages`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{thread_id:n}=t;return this._client.delete(Xe`/threads/${n}/messages/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class ws extends We{retrieve(e,t,s){const{thread_id:n,run_id:r,...o}=t;return this._client.get(Xe`/threads/${n}/runs/${r}/steps/${e}`,{query:o,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t,s){const{thread_id:n,...r}=t;return this._client.getAPIList(Xe`/threads/${n}/runs/${e}/steps`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}const _s=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var bs,vs,xs,Ss,$s,As,Is,Os,ks,Rs,Es,Ps,Cs,Ts,js,qs,Ms,Ls,Ns,Ds,Ws,Bs,Us;class Fs extends St{constructor(){super(...arguments),bs.add(this),xs.set(this,[]),Ss.set(this,{}),$s.set(this,{}),As.set(this,void 0),Is.set(this,void 0),Os.set(this,void 0),ks.set(this,void 0),Rs.set(this,void 0),Es.set(this,void 0),Ps.set(this,void 0),Cs.set(this,void 0),Ts.set(this,void 0)}[(xs=new WeakMap,Ss=new WeakMap,$s=new WeakMap,As=new WeakMap,Is=new WeakMap,Os=new WeakMap,ks=new WeakMap,Rs=new WeakMap,Es=new WeakMap,Ps=new WeakMap,Cs=new WeakMap,Ts=new WeakMap,bs=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new vs;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const s=t?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const n=be.fromReadableStream(e,this.controller);for await(const e of n)o(this,bs,"m",js).call(this,e);if(n.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}toReadableStream(){return new be(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runToolAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.submitToolOutputs(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static createThreadAssistantStream(e,t,s){const n=new vs;return n._run((()=>n._threadAssistantStream(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}static createAssistantStream(e,t,s,n){const r=new vs;return r._run((()=>r._runAssistantStream(e,t,s,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return o(this,Ps,"f")}currentRun(){return o(this,Cs,"f")}currentMessageSnapshot(){return o(this,As,"f")}currentRunStepSnapshot(){return o(this,Ts,"f")}async finalRunSteps(){return await this.done(),Object.values(o(this,Ss,"f"))}async finalMessages(){return await this.done(),Object.values(o(this,$s,"f"))}async finalRun(){if(await this.done(),!o(this,Is,"f"))throw Error("Final run was not received.");return o(this,Is,"f")}async _createThreadAssistantStream(e,t,s){const n=s?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},i=await e.createAndRun(r,{...s,signal:this.controller.signal});this._connected();for await(const e of i)o(this,bs,"m",js).call(this,e);if(i.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}async _createAssistantStream(e,t,s,n){const r=n?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const i={...s,stream:!0},a=await e.create(t,i,{...n,signal:this.controller.signal});this._connected();for await(const e of a)o(this,bs,"m",js).call(this,e);if(a.controller.signal?.aborted)throw new h;return this._addRun(o(this,bs,"m",qs).call(this))}static accumulateDelta(e,t){for(const[s,n]of Object.entries(t)){if(!e.hasOwnProperty(s)){e[s]=n;continue}let t=e[s];if(null!=t)if("index"!==s&&"type"!==s){if("string"==typeof t&&"string"==typeof n)t+=n;else if("number"==typeof t&&"number"==typeof n)t+=n;else{if(!R(t)||!R(n)){if(Array.isArray(t)&&Array.isArray(n)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...n);continue}for(const e of n){if(!R(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const s=e.index;if(null==s)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof s)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${s}`);const n=t[s];null==n?t.push(e):t[s]=this.accumulateDelta(n,e)}continue}throw Error(`Unhandled record type: ${s}, deltaValue: ${n}, accValue: ${t}`)}t=this.accumulateDelta(t,n)}e[s]=t}else e[s]=n;else e[s]=n}return e}_addRun(e){return e}async _threadAssistantStream(e,t,s){return await this._createThreadAssistantStream(t,e,s)}async _runAssistantStream(e,t,s,n){return await this._createAssistantStream(t,e,s,n)}async _runToolAssistantStream(e,t,s,n){return await this._createToolAssistantStream(t,e,s,n)}}vs=Fs,js=function(e){if(!this.ended)switch(r(this,Ps,e),o(this,bs,"m",Ns).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":o(this,bs,"m",Us).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":o(this,bs,"m",Ls).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":o(this,bs,"m",Ms).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},qs=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");if(!o(this,Is,"f"))throw Error("Final run has not been received");return o(this,Is,"f")},Ms=function(e){const[t,s]=o(this,bs,"m",Ws).call(this,e,o(this,As,"f"));r(this,As,t),o(this,$s,"f")[t.id]=t;for(const e of s){const s=t.content[e.index];"text"==s?.type&&this._emit("textCreated",s.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const s of e.data.delta.content){if("text"==s.type&&s.text){let e=s.text,n=t.content[s.index];if(!n||"text"!=n.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,n.text)}if(s.index!=o(this,Os,"f")){if(o(this,ks,"f"))switch(o(this,ks,"f").type){case"text":this._emit("textDone",o(this,ks,"f").text,o(this,As,"f"));break;case"image_file":this._emit("imageFileDone",o(this,ks,"f").image_file,o(this,As,"f"))}r(this,Os,s.index)}r(this,ks,t.content[s.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==o(this,Os,"f")){const t=e.data.content[o(this,Os,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,o(this,As,"f"));break;case"text":this._emit("textDone",t.text,o(this,As,"f"))}}o(this,As,"f")&&this._emit("messageDone",e.data),r(this,As,void 0)}},Ls=function(e){const t=o(this,bs,"m",Ds).call(this,e);switch(r(this,Ts,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const s=e.data.delta;if(s.step_details&&"tool_calls"==s.step_details.type&&s.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of s.step_details.tool_calls)e.index==o(this,Rs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(o(this,Es,"f")&&this._emit("toolCallDone",o(this,Es,"f")),r(this,Rs,e.index),r(this,Es,t.step_details.tool_calls[e.index]),o(this,Es,"f")&&this._emit("toolCallCreated",o(this,Es,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":r(this,Ts,void 0);"tool_calls"==e.data.step_details.type&&o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0)),this._emit("runStepDone",e.data,t)}},Ns=function(e){o(this,xs,"f").push(e),this._emit("event",e)},Ds=function(e){switch(e.event){case"thread.run.step.created":return o(this,Ss,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=o(this,Ss,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let s=e.data;if(s.delta){const n=vs.accumulateDelta(t,s.delta);o(this,Ss,"f")[e.data.id]=n}return o(this,Ss,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":o(this,Ss,"f")[e.data.id]=e.data}if(o(this,Ss,"f")[e.data.id])return o(this,Ss,"f")[e.data.id];throw new Error("No snapshot available")},Ws=function(e,t){let s=[];switch(e.event){case"thread.message.created":return[e.data,s];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let n=e.data;if(n.delta.content)for(const e of n.delta.content)if(e.index in t.content){let s=t.content[e.index];t.content[e.index]=o(this,bs,"m",Bs).call(this,e,s)}else t.content[e.index]=e,s.push(e);return[t,s];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,s];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Bs=function(e,t){return vs.accumulateDelta(t,e)},Us=function(e){switch(r(this,Cs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":r(this,Is,e.data),o(this,Es,"f")&&(this._emit("toolCallDone",o(this,Es,"f")),r(this,Es,void 0))}};let Xs=class extends We{constructor(){super(...arguments),this.steps=new ws(this._client)}create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/threads/${e}/runs`,{query:{include:n},body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}retrieve(e,t,s){const{thread_id:n}=t;return this._client.get(Xe`/threads/${n}/runs/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/threads/${e}/runs`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{thread_id:n}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(n.id,{thread_id:e},s)}createAndStream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...s,headers:{...s?.headers,...n}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,s){return Fs.createAssistantStream(e,this._client.beta.threads.runs,t,s)}submitToolOutputs(e,t,s){const{thread_id:n,...r}=t;return this._client.post(Xe`/threads/${n}/runs/${e}/submit_tool_outputs`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,s){const n=await this.submitToolOutputs(e,t,s);return await this.poll(n.id,t,s)}submitToolOutputsStream(e,t,s){return Fs.createToolAssistantStream(e,this._client.beta.threads.runs,t,s)}};Xs.Steps=ws;class Hs extends We{constructor(){super(...arguments),this.runs=new Xs(this._client),this.messages=new ys(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/threads/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t){return this._client.delete(Xe`/threads/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const s=await this.createAndRun(e,t);return await this.runs.poll(s.id,{thread_id:s.thread_id},t)}createAndRunStream(e,t){return Fs.createThreadAssistantStream(e,this._client.beta.threads,t)}}Hs.Runs=Xs,Hs.Messages=ys;class Ks extends We{constructor(){super(...arguments),this.realtime=new gs(this._client),this.assistants=new ps(this._client),this.threads=new Hs(this._client)}}Ks.Realtime=gs,Ks.Assistants=ps,Ks.Threads=Hs;class Js extends We{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class Vs extends We{retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}/content`,{...s,headers:as([{Accept:"application/binary"},s?.headers]),__binaryResponse:!0})}}let zs=class extends We{constructor(){super(...arguments),this.content=new Vs(this._client)}create(e,t,s){return this._client.post(Xe`/containers/${e}/files`,je({body:t,...s},this._client))}retrieve(e,t,s){const{container_id:n}=t;return this._client.get(Xe`/containers/${n}/files/${e}`,s)}list(e,t={},s){return this._client.getAPIList(Xe`/containers/${e}/files`,ke,{query:t,...s})}delete(e,t,s){const{container_id:n}=t;return this._client.delete(Xe`/containers/${n}/files/${e}`,{...s,headers:as([{Accept:"*/*"},s?.headers])})}};zs.Content=Vs;class Gs extends We{constructor(){super(...arguments),this.files=new zs(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",ke,{query:e,...t})}delete(e,t){return this._client.delete(Xe`/containers/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}}Gs.Files=zs;class Qs extends We{create(e,t,s){const{include:n,...r}=t;return this._client.post(Xe`/conversations/${e}/items`,{query:{include:n},body:r,...s})}retrieve(e,t,s){const{conversation_id:n,...r}=t;return this._client.get(Xe`/conversations/${n}/items/${e}`,{query:r,...s})}list(e,t={},s){return this._client.getAPIList(Xe`/conversations/${e}/items`,Re,{query:t,...s})}delete(e,t,s){const{conversation_id:n}=t;return this._client.delete(Xe`/conversations/${n}/items/${e}`,s)}}class Ys extends We{constructor(){super(...arguments),this.items=new Qs(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/conversations/${e}`,t)}update(e,t,s){return this._client.post(Xe`/conversations/${e}`,{body:t,...s})}delete(e,t){return this._client.delete(Xe`/conversations/${e}`,t)}}Ys.Items=Qs;class Zs extends We{create(e,t){const s=!!e.encoding_format;let n=s?e.encoding_format:"base64";s&&me(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:n},...t});return s?r:(me(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),s=t.length,n=new Uint8Array(s);for(let e=0;es)throw new p({message:`Giving up on waiting for file ${e} to finish processing after ${s} milliseconds.`});return o}};class rn extends We{}let on=class extends We{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class an extends We{constructor(){super(...arguments),this.graders=new on(this._client)}}an.Graders=on;class cn extends We{create(e,t,s){return this._client.getAPIList(Xe`/fine_tuning/checkpoints/${e}/permissions`,Oe,{body:t,method:"post",...s})}retrieve(e,t={},s){return this._client.get(Xe`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...s})}delete(e,t,s){const{fine_tuned_model_checkpoint:n}=t;return this._client.delete(Xe`/fine_tuning/checkpoints/${n}/permissions/${e}`,s)}}let ln=class extends We{constructor(){super(...arguments),this.permissions=new cn(this._client)}};ln.Permissions=cn;class un extends We{list(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/checkpoints`,ke,{query:t,...s})}}class hn extends We{constructor(){super(...arguments),this.checkpoints=new un(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(Xe`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",ke,{query:e,...t})}cancel(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},s){return this._client.getAPIList(Xe`/fine_tuning/jobs/${e}/events`,ke,{query:t,...s})}pause(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(Xe`/fine_tuning/jobs/${e}/resume`,t)}}hn.Checkpoints=un;class dn extends We{constructor(){super(...arguments),this.methods=new rn(this._client),this.jobs=new hn(this._client),this.checkpoints=new ln(this._client),this.alpha=new an(this._client)}}dn.Methods=rn,dn.Jobs=hn,dn.Checkpoints=ln,dn.Alpha=an;class pn extends We{}class fn extends We{constructor(){super(...arguments),this.graderModels=new pn(this._client)}}fn.GraderModels=pn;class mn extends We{createVariation(e,t){return this._client.post("/images/variations",je({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",je({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class gn extends We{retrieve(e,t){return this._client.get(Xe`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Oe,e)}delete(e,t){return this._client.delete(Xe`/models/${e}`,t)}}class yn extends We{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class wn extends We{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class _n extends We{constructor(){super(...arguments),this.clientSecrets=new wn(this._client)}}function bn(e,t){return t&&function(e){if(Je(e.text?.format))return!0;return!1}(t)?vn(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function vn(e,t){const s=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:Sn(t,e)};if("message"===e.type){const s=e.content.map((e=>"output_text"===e.type?{...e,parsed:xn(t,e.text)}:e));return{...e,content:s}}return e})),n=Object.assign({},e,{output:s});return Object.getOwnPropertyDescriptor(e,"output_text")||$n(n),Object.defineProperty(n,"output_parsed",{enumerable:!0,get(){for(const e of n.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),n}function xn(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const s=e.text?.format;return s.$parseRaw(t)}return JSON.parse(t)}function Sn(e,t){const s=(n=e.tools??[],r=t.name,n.find((e=>"function"===e.type&&e.name===r)));var n,r,o;return{...t,...t,parsed_arguments:(o=s,"auto-parseable-tool"===o?.$brand?s.$parseRaw(t.arguments):s?.strict?JSON.parse(t.arguments):null)}}function $n(e){const t=[];for(const s of e.output)if("message"===s.type)for(const e of s.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var An,In,On,kn,Rn,En,Pn,Cn;_n.ClientSecrets=wn;class Tn extends St{constructor(e){super(),An.add(this),In.set(this,void 0),On.set(this,void 0),kn.set(this,void 0),r(this,In,e)}static createResponse(e,t,s){const n=new Tn(t);return n._run((()=>n._createOrRetrieveResponse(e,t,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),n}async _createOrRetrieveResponse(e,t,s){const n=s?.signal;let r;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),o(this,An,"m",Rn).call(this);let i=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...s,signal:this.controller.signal,stream:!0}),i=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...s,signal:this.controller.signal}),this._connected();for await(const e of r)o(this,An,"m",En).call(this,e,i);if(r.controller.signal?.aborted)throw new h;return o(this,An,"m",Pn).call(this)}[(In=new WeakMap,On=new WeakMap,kn=new WeakMap,An=new WeakSet,Rn=function(){this.ended||r(this,On,void 0)},En=function(e,t){if(this.ended)return;const s=(e,s)=>{(null==t||s.sequence_number>t)&&this._emit(e,s)},n=o(this,An,"m",Cn).call(this,e);switch(s("event",e),e.type){case"response.output_text.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);if("message"===t.type){const n=t.content[e.content_index];if(!n)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==n.type)throw new l(`expected content to be 'output_text', got ${n.type}`);s("response.output_text.delta",{...e,snapshot:n.text})}break}case"response.function_call_arguments.delta":{const t=n.output[e.output_index];if(!t)throw new l(`missing output at index ${e.output_index}`);"function_call"===t.type&&s("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:s(e.type,e)}},Pn=function(){if(this.ended)throw new l("stream has ended, this shouldn't happen");const e=o(this,On,"f");if(!e)throw new l("request ended without sending any events");r(this,On,void 0);const t=function(e,t){return bn(e,t)}(e,o(this,In,"f"));return r(this,kn,t),t},Cn=function(e){let t=o(this,On,"f");if(!t){if("response.created"!==e.type)throw new l(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=r(this,On,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);const n=s.type,r=e.part;"message"===n&&"reasoning_text"!==r.type?s.content.push(r):"reasoning"===n&&"reasoning_text"===r.type&&(s.content||(s.content=[]),s.content.push(r));break}case"response.output_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("message"===s.type){const t=s.content[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new l(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);"function_call"===s.type&&(s.arguments+=e.delta);break}case"response.reasoning_text.delta":{const s=t.output[e.output_index];if(!s)throw new l(`missing output at index ${e.output_index}`);if("reasoning"===s.type){const t=s.content?.[e.content_index];if(!t)throw new l(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new l(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":r(this,On,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let s=!1;return this.on("event",(s=>{const n=t.shift();n?n.resolve(s):e.push(s)})),this.on("end",(()=>{s=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),this.on("error",(e=>{s=!0;for(const s of t)s.reject(e);t.length=0})),{next:async()=>{if(!e.length)return s?{value:void 0,done:!0}:new Promise(((e,s)=>t.push({resolve:e,reject:s}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=o(this,kn,"f");if(!e)throw new l("stream ended without producing a ChatCompletion");return e}}class jn extends We{list(e,t={},s){return this._client.getAPIList(Xe`/responses/${e}/input_items`,ke,{query:t,...s})}}class qn extends We{constructor(){super(...arguments),this.inputItems=new jn(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}retrieve(e,t={},s){return this._client.get(Xe`/responses/${e}`,{query:t,...s,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&$n(e),e)))}delete(e,t){return this._client.delete(Xe`/responses/${e}`,{...t,headers:as([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>vn(t,e)))}stream(e,t){return Tn.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(Xe`/responses/${e}/cancel`,t)}}qn.InputItems=jn;class Mn extends We{create(e,t,s){return this._client.post(Xe`/uploads/${e}/parts`,je({body:t,...s},this._client))}}class Ln extends We{constructor(){super(...arguments),this.parts=new Mn(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(Xe`/uploads/${e}/cancel`,t)}complete(e,t,s){return this._client.post(Xe`/uploads/${e}/complete`,{body:t,...s})}}Ln.Parts=Mn;class Nn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/file_batches`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/file_batches/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}cancel(e,t,s){const{vector_store_id:n}=t;return this._client.post(Xe`/vector_stores/${n}/file_batches/${e}/cancel`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t);return await this.poll(e,n.id,s)}listFiles(e,t,s){const{vector_store_id:n,...r}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/file_batches/${e}/files`,ke,{query:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:s=[]},n){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=n?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),c=[...s];const l=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},n);c.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),s=t.filter((e=>"rejected"===e.status));if(s.length){for(const e of s)console.error(e.reason);throw new Error(`${s.length} promise(s) failed - see the above errors`)}const n=[];for(const e of t)"fulfilled"===e.status&&n.push(e.value);return n})(l),await this.createAndPoll(e,{file_ids:c})}}class Dn extends We{create(e,t,s){return this._client.post(Xe`/vector_stores/${e}/files`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}retrieve(e,t,s){const{vector_store_id:n}=t;return this._client.get(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}update(e,t,s){const{vector_store_id:n,...r}=t;return this._client.post(Xe`/vector_stores/${n}/files/${e}`,{body:r,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e,t={},s){return this._client.getAPIList(Xe`/vector_stores/${e}/files`,ke,{query:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}delete(e,t,s){const{vector_store_id:n}=t;return this._client.delete(Xe`/vector_stores/${n}/files/${e}`,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}async createAndPoll(e,t,s){const n=await this.create(e,t,s);return await this.poll(e,n.id,s)}async poll(e,t,s){const n=as([s?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":s?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...s,headers:n}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(s?.pollIntervalMs)e=s.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const s=parseInt(t);isNaN(s)||(e=s)}}await E(e);break;case"failed":case"completed":return o}}}async upload(e,t,s){const n=await this._client.files.create({file:t,purpose:"assistants"},s);return this.create(e,{file_id:n.id},s)}async uploadAndPoll(e,t,s){const n=await this.upload(e,t,s);return await this.poll(e,n.id,s)}content(e,t,s){const{vector_store_id:n}=t;return this._client.getAPIList(Xe`/vector_stores/${n}/files/${e}/content`,Oe,{...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}class Wn extends We{constructor(){super(...arguments),this.files=new Dn(this._client),this.fileBatches=new Nn(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,s){return this._client.post(Xe`/vector_stores/${e}`,{body:t,...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",ke,{query:e,...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(Xe`/vector_stores/${e}`,{...t,headers:as([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,s){return this._client.getAPIList(Xe`/vector_stores/${e}/search`,Oe,{body:t,method:"post",...s,headers:as([{"OpenAI-Beta":"assistants=v2"},s?.headers])})}}var Bn,Un,Fn,Xn,Hn,Kn,Jn;Wn.Files=Dn,Wn.FileBatches=Nn;class Vn extends We{constructor(){super(...arguments),Bn.add(this)}async unwrap(e,t,s=this._client.webhookSecret,n=300){return await this.verifySignature(e,t,s,n),JSON.parse(e)}async verifySignature(e,t,s=this._client.webhookSecret,n=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");o(this,Bn,"m",Un).call(this,s);const r=as([t]).values,i=o(this,Bn,"m",Fn).call(this,r,"webhook-signature"),a=o(this,Bn,"m",Fn).call(this,r,"webhook-timestamp"),c=o(this,Bn,"m",Fn).call(this,r,"webhook-id"),l=parseInt(a,10);if(isNaN(l))throw new $("Invalid webhook timestamp format");const u=Math.floor(Date.now()/1e3);if(u-l>n)throw new $("Webhook timestamp is too old");if(l>u+n)throw new $("Webhook timestamp is too new");const h=i.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=s.startsWith("whsec_")?Buffer.from(s.replace("whsec_",""),"base64"):Buffer.from(s,"utf-8"),p=c?`${c}.${a}.${e}`:`${a}.${e}`,f=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of h)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",f,t,(new TextEncoder).encode(p)))return}catch{continue}throw new $("The given webhook signature does not match the expected signature")}}Bn=new WeakSet,Un=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},Fn=function(e,t){if(!e)throw new Error("Headers are required");const s=e.get(t);if(null==s)throw new Error(`Missing required header: ${t}`);return s};class zn{constructor({baseURL:e=_s("OPENAI_BASE_URL"),apiKey:t=_s("OPENAI_API_KEY"),organization:s=_s("OPENAI_ORG_ID")??null,project:n=_s("OPENAI_PROJECT_ID")??null,webhookSecret:o=_s("OPENAI_WEBHOOK_SECRET")??null,...i}={}){if(Xn.add(this),Kn.set(this,void 0),this.completions=new Js(this),this.chat=new rs(this),this.embeddings=new Zs(this),this.files=new nn(this),this.images=new mn(this),this.audio=new hs(this),this.moderations=new yn(this),this.models=new gn(this),this.fineTuning=new dn(this),this.graders=new fn(this),this.vectorStores=new Wn(this),this.webhooks=new Vn(this),this.beta=new Ks(this),this.batches=new ds(this),this.uploads=new Ln(this),this.responses=new qn(this),this.realtime=new _n(this),this.conversations=new Ys(this),this.evals=new sn(this),this.containers=new Gs(this),void 0===t)throw new l("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const a={apiKey:t,organization:s,project:n,webhookSecret:o,...i,baseURL:e||"https://api.openai.com/v1"};if(!a.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new l("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=a.baseURL,this.timeout=a.timeout??Hn.DEFAULT_TIMEOUT,this.logger=a.logger??console;const c="warn";this.logLevel=c,this.logLevel=ue(a.logLevel,"ClientOptions.logLevel",this)??ue(_s("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??c,this.fetchOptions=a.fetchOptions,this.maxRetries=a.maxRetries??2,this.fetch=a.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),r(this,Kn,D),this._options=a,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=s,this.project=n,this.webhookSecret=o}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return as([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return Z(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${P}`}defaultIdempotencyKey(){return`stainless-node-retry-${i()}`}makeStatusError(e,t,s,n){return u.generate(e,t,s,n)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof l)throw e;throw new l(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new l(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,s){const n=!o(this,Xn,"m",Jn).call(this)&&s||this.baseURL,r=(e=>A.test(e))(e)?new URL(e):new URL(n+(n.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),i=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(i)||(t={...i,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:s}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,s){return this.request(Promise.resolve(s).then((s=>({method:e,path:t,...s}))))}request(e,t=null){return new $e(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,s){const n=await e,r=n.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(n);const{req:o,url:i,timeout:l}=await this.buildRequest(n,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:n});const u="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),f=void 0===s?"":`, retryOf: ${s}`,m=Date.now();if(me(this).debug(`[${u}] sending request`,ge({retryOfRequestLogID:s,method:n.method,url:i,options:n,headers:o.headers})),n.signal?.aborted)throw new h;const g=new AbortController,y=await this.fetchWithTimeout(i,o,l,g).catch(c),w=Date.now();if(y instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(n.signal?.aborted)throw new h;const r=a(y)||/timed? ?out/i.test(String(y)+("cause"in y?String(y.cause):""));if(t)return me(this).info(`[${u}] connection ${r?"timed out":"failed"} - ${e}`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (${e})`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),this.retryRequest(n,t,s??u);if(me(this).info(`[${u}] connection ${r?"timed out":"failed"} - error; no more retries left`),me(this).debug(`[${u}] connection ${r?"timed out":"failed"} (error; no more retries left)`,ge({retryOfRequestLogID:s,url:i,durationMs:w-m,message:y.message})),r)throw new p;throw new d({cause:y})}const _=`[${u}${f}${[...y.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${y.ok?"succeeded":"failed"} with status ${y.status} in ${w-m}ms`;if(!y.ok){const e=await this.shouldRetry(y);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),s=t.cancel();t.releaseLock(),await s}(y.body),me(this).info(`${_} - ${e}`),me(this).debug(`[${u}] response error (${e})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),this.retryRequest(n,t,s??u,y.headers)}const r=e?"error; no more retries left":"error; not retryable";me(this).info(`${_} - ${r}`);const o=await y.text().catch((e=>c(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;me(this).debug(`[${u}] response error (${r})`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,message:a,durationMs:Date.now()-m}));throw this.makeStatusError(y.status,i,a,y.headers)}return me(this).info(_),me(this).debug(`[${u}] response start`,ge({retryOfRequestLogID:s,url:y.url,status:y.status,headers:y.headers,durationMs:w-m})),{response:y,options:n,controller:g,requestLogID:u,retryOfRequestLogID:s,startTime:m}}getAPIList(e,t,s){return this.requestAPIList(t,{method:"get",path:e,...s})}requestAPIList(e,t){const s=this.makeRequest(t,null,void 0);return new Ie(this,s,e)}async fetchWithTimeout(e,t,s,n){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>n.abort()));const a=setTimeout((()=>n.abort()),s),c=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,l={signal:n.signal,...c?{duplex:"half"}:{},method:"GET",...i};o&&(l.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,l)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,s,n){let r;const o=n?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=n?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const s=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,s)}return await E(r),this.makeRequest(e,t-1,s)}calculateDefaultRetryTimeoutMillis(e,t){const s=t-e;return Math.min(.5*Math.pow(2,s),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const s={...e},{method:n,path:r,query:o,defaultBaseURL:i}=s,a=this.buildURL(r,o,i);"timeout"in s&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new l(`${e} must be an integer`);if(t<0)throw new l(`${e} must be a positive integer`)})("timeout",s.timeout),s.timeout=s.timeout??this.timeout;const{bodyHeaders:c,body:u}=this.buildBody({options:s});return{req:{method:n,headers:await this.buildHeaders({options:e,method:n,bodyHeaders:c,retryCount:t}),...s.signal&&{signal:s.signal},...globalThis.ReadableStream&&u instanceof globalThis.ReadableStream&&{duplex:"half"},...u&&{body:u},...this.fetchOptions??{},...s.fetchOptions??{}},url:a,timeout:s.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:s,retryCount:n}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=as([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(n),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...q??(q=C()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,s,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const s=as([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&s.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:L(e)}:o(this,Kn,"f").call(this,{body:e,headers:s})}}function Gn({msg:e,isError:t,isInfinite:s}){const n=document.querySelector("#message");n.style.color=t?"red":"limegreen",n.textContent=e,n.style.display="block",s||setTimeout((()=>n.style.display="none"),5e3)}Hn=zn,Kn=new WeakMap,Xn=new WeakSet,Jn=function(){return"https://api.openai.com/v1"!==this.baseURL},zn.OpenAI=Hn,zn.DEFAULT_TIMEOUT=6e5,zn.OpenAIError=l,zn.APIError=u,zn.APIConnectionError=d,zn.APIConnectionTimeoutError=p,zn.APIUserAbortError=h,zn.NotFoundError=y,zn.ConflictError=w,zn.RateLimitError=b,zn.BadRequestError=f,zn.AuthenticationError=m,zn.InternalServerError=v,zn.PermissionDeniedError=g,zn.UnprocessableEntityError=_,zn.InvalidWebhookSignatureError=$,zn.toFile=async function(e,t,s){if(Ee(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&Ne(e))(e=await e))return e instanceof File?e:Pe([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const n=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Pe(await De(n),t,s)}const n=await De(e);if(t||(t=Ce(e)),!s?.type){const e=n.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(s={...s,type:e})}return Pe(n,t,s)},zn.Completions=Js,zn.Chat=rs,zn.Embeddings=Zs,zn.Files=nn,zn.Images=mn,zn.Audio=hs,zn.Moderations=yn,zn.Models=gn,zn.FineTuning=dn,zn.Graders=fn,zn.VectorStores=Wn,zn.Webhooks=Vn,zn.Beta=Ks,zn.Batches=ds,zn.Uploads=Ln,zn.Responses=qn,zn.Realtime=_n,zn.Conversations=Ys,zn.Evals=sn,zn.Containers=Gs;const Qn=document.querySelector("#apiKey"),Yn=document.querySelector("#model"),Zn=document.querySelector("#models"),er=document.querySelector("#includeImages-line"),tr=document.querySelector("#baseURL"),sr=document.querySelector("#projectId"),nr=document.querySelector("#maxTokens");function rr(){!function(e){const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}(Yn.value)?er.style.display="none":er.style.display="flex"}Yn.addEventListener("input",rr),Yn.addEventListener("focus",(function(){return n(this,void 0,void 0,(function*(){var e,t,s;const n=null===(e=Qn.value)||void 0===e?void 0:e.trim(),r=null===(t=tr.value)||void 0===t?void 0:t.trim(),o=null===(s=sr.value)||void 0===s?void 0:s.trim();if(n){Yn.innerHTML="";try{const e=new zn({apiKey:n,baseURL:r,project:o,dangerouslyAllowBrowser:!0}),t=(yield e.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));t.sort(((e,t)=>t.id.localeCompare(e.id)));for(const e of t){const t=document.createElement("option");t.value=e.id,t.textContent=e.id,Zn.appendChild(t)}rr()}catch(e){console.error(e),Gn({msg:e,isError:!0})}}}))}));document.querySelector("#check-model").addEventListener("click",(function(){return n(this,void 0,void 0,(function*(){var e,t,s,n,r,o;const i=null===(e=Yn.value)||void 0===e?void 0:e.trim(),a=null===(t=Qn.value)||void 0===t?void 0:t.trim(),c=null===(s=tr.value)||void 0===s?void 0:s.trim(),l=null===(n=sr.value)||void 0===n?void 0:n.trim(),u=nr.value?parseInt(nr.value):void 0;try{Gn({msg:"Checking GPT version...",isInfinite:!0,isError:!1});const e=new zn({apiKey:a,baseURL:c,project:l,dangerouslyAllowBrowser:!0}),t=null===(o=null===(r=(yield e.chat.completions.create({model:i,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:u||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===r?void 0:r.message)||void 0===o?void 0:o.content;if(!t)throw new Error("No content returned from the model.");const s=JSON.parse(t);if("string"!=typeof s.reply||"boolean"!=typeof s.success||"object"!=typeof s.data||"number"!=typeof s.data.number)throw new Error("Model did not follow the JSON schema correctly.");Gn({msg:"The model is valid and supports structured outputs!"})}catch(e){Gn({msg:e,isError:!0})}}))}));const or=["includeImages"],ir={autocomplete:[],clipboard:["typing","mouseover"]};function ar(){const s=ir[e.actualMode],n=t.filter((e=>!s.includes(e)&&!or.includes(e)));for(const e of s)document.querySelector("#"+e).parentElement.style.display="none";for(const e of n)document.querySelector("#"+e).parentElement.style.display=""}for(const t of s)t.addEventListener("click",(function(){const n=t.value;e.actualMode=n;for(const e of s)e.value!==n?e.classList.add("not-selected"):e.classList.remove("not-selected");ar()}));const cr="2.0.0",lr=document.querySelector("#version");function ur(e,t=!0){if(t)return void(lr.textContent="v"+e);const s=document.createElement("a");s.href="https://github.com/yoannchb-pro/MoodleGPT",s.rel="noopener noreferrer",s.target="_blank",s.textContent="v"+e,lr.appendChild(s),lr.appendChild(document.createTextNode(" is now available !"))}!function(){n(this,void 0,void 0,(function*(){const e=yield function(){return n(this,void 0,void 0,(function*(){const e=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json");return(yield e.json()).version}))}().catch((e=>(console.error(e),cr))),t=e.split("."),s=cr.split("."),r=Math.min(t.length,s.length);for(let n=0;nparseInt(s[n]))return ur(e,!1);if(parseInt(s[n])>parseInt(t[n]))return ur(cr)}ur(cr)}))}();const hr=document.querySelector("#settings"),dr=document.querySelector("#advanced-settings"),pr=document.querySelector("#switch-settings");pr.addEventListener("click",(function(e){e.preventDefault(),"flex"===dr.style.display?(hr.style.display="flex",dr.style.display="none",pr.textContent="Advanced settings"):(hr.style.display="none",dr.style.display="flex",pr.textContent="Go back to settings")}));const fr=document.querySelector(".save"),mr=["apiKey","code","model","baseURL","maxTokens","projectId","timeoutValue"];fr.addEventListener("click",(function(){const[s,n,r,o,i,a,c]=mr.map((e=>document.querySelector("#"+e).value.trim())),[l,u,h,d,p,f,m,g,y]=t.map((e=>{const t=document.querySelector("#"+e);return t.checked&&"none"!==t.parentElement.style.display}));s&&r?n.length>0&&n.length<2?Gn({msg:"The code should at least contain 2 characters",isError:!0}):(chrome.storage.sync.set({moodleGPT:{apiKey:s,code:n,model:r,baseURL:o,maxTokens:i?parseInt(i):void 0,projectId:a,timeoutValue:c?parseInt(c):void 0,logs:l,title:u,cursor:h,typing:d,mouseover:p,infinite:f,timeout:m,history:g,includeImages:y,mode:e.actualMode}}),Gn({msg:"Configuration saved"})):Gn({msg:"Please complete all the form",isError:!0})})),chrome.storage.sync.get(["moodleGPT"]).then((function(n){const r=n.moodleGPT;if(r){if(r.mode){e.actualMode=r.mode;for(const e of s)e.value===r.mode?e.classList.remove("not-selected"):e.classList.add("not-selected")}mr.forEach((e=>r[e]?document.querySelector("#"+e).value=r[e]:null)),t.forEach((e=>document.querySelector("#"+e).checked=r[e]||""))}ar(),rr()}))})); +!function(e){"function"==typeof define&&define.amd?define(e):e()}((function(){"use strict";var e,t,n,s,r,o,i,a,l,c,u,d,h,p,f={},_=[],m=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function y(e,t){for(var n in t)e[n]=t[n];return e}function b(e){e&&e.parentNode&&e.parentNode.removeChild(e)}function w(e,s,r,o,i){var a={type:e,props:s,key:r,ref:o,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==i?++n:i,__i:-1,__u:0};return null==i&&null!=t.vnode&&t.vnode(a),a}function v(e){return e.children}function x(e,t){this.props=e,this.context=t}function S(e,t){if(null==t)return e.__?S(e.__,e.__i+1):null;for(var n;tt&&s.sort(i),e=s.shift(),t=s.length,k(e)}finally{s.length=I.__r=0}}function O(e,t,n,s,r,o,i,a,l,c,u){var d,h,p,m,g,y,b,w=s&&s.__k||_,v=t.length;for(l=R(n,t,w,l,v),d=0;d0?i=e.__k[o]=w(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):e.__k[o]=i,l=o+h,i.__=e,i.__b=e.__b+1,a=null,-1!=(c=i.__i=C(i,n,l,d))&&(d--,(a=n[c])&&(a.__u|=2)),null==a||null==a.__v?(-1==c&&(r>u?h--:rl?h--:h++,i.__u|=4))):e.__k[o]=null;if(d)for(o=0;o(u?1:0))for(r=n-1,o=n+1;r>=0||o=0?r--:o++])&&!(2&c.__u)&&a==c.key&&l==c.type)return i;return-1}function E(e,t,n){"-"==t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||m.test(t)?n:n+"px"}function T(e,t,n,s,r){var o,i;e:if("style"==t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof s&&(e.style.cssText=s=""),s)for(t in s)n&&t in n||E(e.style,t,"");if(n)for(t in n)s&&n[t]==s[t]||E(e.style,t,n[t])}else if("o"==t[0]&&"n"==t[1])o=t!=(t=t.replace(u,"$1")),i=t.toLowerCase(),t=i in e||"onFocusOut"==t||"onFocusIn"==t?i.slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?s?n[c]=s[c]:(n[c]=d,e.addEventListener(t,o?p:h,o)):e.removeEventListener(t,o?p:h,o);else{if("http://www.w3.org/2000/svg"==r)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!=t&&"height"!=t&&"href"!=t&&"list"!=t&&"form"!=t&&"tabIndex"!=t&&"download"!=t&&"rowSpan"!=t&&"colSpan"!=t&&"role"!=t&&"popover"!=t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!=t[4]?e.removeAttribute(t):e.setAttribute(t,"popover"==t&&1==n?"":n))}}function j(e){return function(n){if(this.l){var s=this.l[n.type+e];if(null==n[l])n[l]=d++;else if(n[l]0?e:g(e)?e.map(D):y({},e)}function q(n,s,r,o,i,a,l,c,u){var d,h,p,_,m,y,w,v=r.props||f,x=s.props,k=s.type;if("svg"==k?i="http://www.w3.org/2000/svg":"math"==k?i="http://www.w3.org/1998/Math/MathML":i||(i="http://www.w3.org/1999/xhtml"),null!=a)for(d=0;d=n.__.length&&n.__.push({}),n.__[e]}function ie(e){return G=1,function(e,t){var n=oe(K++,2);if(n.t=e,!n.__c&&(n.__=[pe(void 0,t),function(e){var t=n.__N?n.__N[0]:n.__[0],s=n.t(t,e);t!==s&&(n.__N=[s,n.__[1]],n.__c.setState({}))}],n.__c=J,!J.__f)){var s=function(e,t,s){if(!n.__c.__H)return!0;var o=n.__c.__H.__.filter((function(e){return e.__c}));if(o.every((function(e){return!e.__N})))return!r||r.call(this,e,t,s);var i=n.__c.props!==e;return o.some((function(e){if(e.__N){var t=e.__[0];e.__=e.__N,e.__N=void 0,t!==e.__[0]&&(i=!0)}})),r&&r.call(this,e,t,s)||i};J.__f=!0;var r=J.shouldComponentUpdate,o=J.componentWillUpdate;J.componentWillUpdate=function(e,t,n){if(this.__e){var i=r;r=void 0,s(e,t,n),r=i}o&&o.call(this,e,t,n)},J.shouldComponentUpdate=s}return n.__N||n.__}(pe,e)}function ae(e,t){var n=oe(K++,3);!Y.__s&&function(e,t){return!e||e.length!==t.length||t.some((function(t,n){return t!==e[n]}))}(n.__H,t)&&(n.__=e,n.u=t,J.__H.__h.push(n))}function le(){for(var e;e=Q.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(de),t.__h.some(he),t.__h=[]}catch(n){t.__h=[],Y.__e(n,e.__v)}}}Y.__b=function(e){J=null,Z&&Z(e)},Y.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),re&&re(e,t)},Y.__r=function(e){ee&&ee(e),K=0;var t=(J=e.__c).__H;t&&(V===J?(t.__h=[],J.__h=[],t.__.some((function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0}))):(t.__h.some(de),t.__h.some(he),t.__h=[],K=0)),V=J},Y.diffed=function(e){te&&te(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&(1!==Q.push(t)&&z===Y.requestAnimationFrame||((z=Y.requestAnimationFrame)||ue)(le)),t.__H.__.some((function(e){e.u&&(e.__H=e.u),e.u=void 0}))),V=J=null},Y.__c=function(e,t){t.some((function(e){try{e.__h.some(de),e.__h=e.__h.filter((function(e){return!e.__||he(e)}))}catch(n){t.some((function(e){e.__h&&(e.__h=[])})),t=[],Y.__e(n,e.__v)}})),ne&&ne(e,t)},Y.unmount=function(e){se&&se(e);var t,n=e.__c;n&&n.__H&&(n.__H.__.some((function(e){try{de(e)}catch(e){t=e}})),n.__H=void 0,t&&Y.__e(t,n.__v))};var ce="function"==typeof requestAnimationFrame;function ue(e){var t,n=function(){clearTimeout(s),ce&&cancelAnimationFrame(t),setTimeout(e)},s=setTimeout(n,35);ce&&(t=requestAnimationFrame(n))}function de(e){var t=J,n=e.__c;"function"==typeof n&&(e.__c=void 0,n()),J=t}function he(e){var t=J;e.__c=e.__(),J=t}function pe(e,t){return"function"==typeof t?t(e):t}function fe(){const[e,t]=ie("2.0.0"),[n,s]=ie(!1);return ae((()=>{(()=>{X(this,void 0,void 0,(function*(){try{const n=yield fetch("https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json"),r=(yield n.json()).version,o=r.split("."),i=e.split("."),a=Math.min(o.length,i.length);for(let e=0;eparseInt(i[e]))return t(r),void s(!0);if(parseInt(i[e])>parseInt(o[e]))return}}catch(e){console.error(e)}}))})()}),[]),H("div",{class:"flex items-center gap-4 mb-2",children:[H("img",{src:"../icon.png",alt:"SparkAssist Logo",class:"w-12 h-12 drop-shadow-md animate-float"}),H("div",{children:[H("h1",{class:"m-0 text-2xl font-bold bg-gradient-to-r from-indigo-300 to-indigo-400 bg-clip-text text-transparent",children:"SparkAssist"}),H("p",{class:"m-0 mt-1 text-xs text-text-secondary",children:n?H(v,{children:[H("a",{href:"https://github.com/yoannchb-pro/MoodleGPT",target:"_blank",rel:"noopener noreferrer",class:"text-sky-400 no-underline font-medium hover:text-sky-300 transition-colors",children:["v",e]})," ","is now available !"]}):`v${e}`})]})]})}function _e(e,t,n,s,r){if("function"==typeof t||!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return t.set(e,n),n}function me(e,t,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(e):s?s.value:t.get(e)}let ge=function(){const{crypto:e}=globalThis;if(e?.randomUUID)return ge=e.randomUUID.bind(e),e.randomUUID();const t=new Uint8Array(1),n=e?()=>e.getRandomValues(t)[0]:()=>255*Math.random()&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,(e=>(+e^n()&15>>+e/4).toString(16)))};function ye(e){return"object"==typeof e&&null!==e&&("name"in e&&"AbortError"===e.name||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}const be=e=>{if(e instanceof Error)return e;if("object"==typeof e&&null!==e){try{if("[object Error]"===Object.prototype.toString.call(e)){const t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};class we extends Error{}class ve extends we{constructor(e,t,n,s){super(`${ve.makeMessage(e,t,n)}`),this.status=e,this.headers=s,this.requestID=s?.get("x-request-id"),this.error=t;const r=t;this.code=r?.code,this.param=r?.param,this.type=r?.type}static makeMessage(e,t,n){const s=t?.message?"string"==typeof t.message?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&s?`${e} ${s}`:e?`${e} status code (no body)`:s||"(no status code or body)"}static generate(e,t,n,s){if(!e||!s)return new Se({message:n,cause:be(t)});const r=t?.error;return 400===e?new $e(e,r,n,s):401===e?new Ae(e,r,n,s):403===e?new Ie(e,r,n,s):404===e?new Oe(e,r,n,s):409===e?new Re(e,r,n,s):422===e?new Pe(e,r,n,s):429===e?new Ce(e,r,n,s):e>=500?new Ee(e,r,n,s):new ve(e,r,n,s)}}class xe extends ve{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}}class Se extends ve{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}}class ke extends Se{constructor({message:e}={}){super({message:e??"Request timed out."})}}class $e extends ve{}class Ae extends ve{}class Ie extends ve{}class Oe extends ve{}class Re extends ve{}class Pe extends ve{}class Ce extends ve{}class Ee extends ve{}class Te extends we{constructor(){super("Could not parse response content as the length limit was reached")}}class je extends we{constructor(){super("Could not parse response content as the request was rejected by the content filter")}}class Me extends Error{constructor(e){super(e)}}const Ne=/^[a-z][a-z0-9+.-]*:/i;let Le=e=>(Le=Array.isArray,Le(e)),De=Le;function qe(e){return"object"!=typeof e?{}:e??{}}function We(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}const Be=e=>new Promise((t=>setTimeout(t,e))),Ue="5.23.2";const Fe=()=>{const e="undefined"!=typeof Deno&&null!=Deno.build?"deno":"undefined"!=typeof EdgeRuntime?"edge":"[object process]"===Object.prototype.toString.call(void 0!==globalThis.process?globalThis.process:0)?"node":"unknown";if("deno"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ue,"X-Stainless-OS":Xe(Deno.build.os),"X-Stainless-Arch":He(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":"string"==typeof Deno.version?Deno.version:Deno.version?.deno??"unknown"};if("undefined"!=typeof EdgeRuntime)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ue,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if("node"===e)return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ue,"X-Stainless-OS":Xe(globalThis.process.platform??"unknown"),"X-Stainless-Arch":He(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};const t=function(){if("undefined"==typeof navigator||!navigator)return null;const e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(const{key:t,pattern:n}of e){const e=n.exec(navigator.userAgent);if(e){return{browser:t,version:`${e[1]||0}.${e[2]||0}.${e[3]||0}`}}}return null}();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ue,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ue,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};const He=e=>"x32"===e?"x32":"x86_64"===e||"x64"===e?"x64":"arm"===e?"arm":"aarch64"===e||"arm64"===e?"arm64":e?`other:${e}`:"unknown",Xe=e=>(e=e.toLowerCase()).includes("ios")?"iOS":"android"===e?"Android":"darwin"===e?"MacOS":"win32"===e?"Windows":"freebsd"===e?"FreeBSD":"openbsd"===e?"OpenBSD":"linux"===e?"Linux":e?`Other:${e}`:"Unknown";let Ke;function Je(...e){const t=globalThis.ReadableStream;if(void 0===t)throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function Ve(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return Je({start(){},async pull(e){const{done:n,value:s}=await t.next();n?e.close():e.enqueue(s)},async cancel(){await(t.return?.())}})}function ze(e){if(e[Symbol.asyncIterator])return e;const t=e.getReader();return{async next(){try{const e=await t.read();return e?.done&&t.releaseLock(),e}catch(e){throw t.releaseLock(),e}},async return(){const e=t.cancel();return t.releaseLock(),await e,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}const Ge=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)}),Qe="RFC3986",Ye=e=>String(e),Ze={RFC1738:e=>String(e).replace(/%20/g,"+"),RFC3986:Ye};let et=(e,t)=>(et=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),et(e,t));const tt=(()=>{const e=[];for(let t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e})(),nt=1024;function st(e,t){if(Le(e)){const n=[];for(let s=0;sString(e)+"[]",comma:"comma",indices:(e,t)=>String(e)+"["+t+"]",repeat:e=>String(e)},ot=function(e,t){Array.prototype.push.apply(e,Le(t)?t:[t])};let it;const at={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:(e,t,n,s,r)=>{if(0===e.length)return e;let o=e;if("symbol"==typeof e?o=Symbol.prototype.toString.call(e):"string"!=typeof e&&(o=String(e)),"iso-8859-1"===n)return escape(o).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));let i="";for(let e=0;e=nt?o.slice(e,e+nt):o,n=[];for(let e=0;e=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122||"RFC1738"===r&&(40===s||41===s)?n[n.length]=t.charAt(e):s<128?n[n.length]=tt[s]:s<2048?n[n.length]=tt[192|s>>6]+tt[128|63&s]:s<55296||s>=57344?n[n.length]=tt[224|s>>12]+tt[128|s>>6&63]+tt[128|63&s]:(e+=1,s=65536+((1023&s)<<10|1023&t.charCodeAt(e)),n[n.length]=tt[240|s>>18]+tt[128|s>>12&63]+tt[128|s>>6&63]+tt[128|63&s])}i+=n.join("")}return i},encodeValuesOnly:!1,format:Qe,formatter:Ye,indices:!1,serializeDate:e=>(it??(it=Function.prototype.call.bind(Date.prototype.toISOString)))(e),skipNulls:!1,strictNullHandling:!1};const lt={};function ct(e,t,n,s,r,o,i,a,l,c,u,d,h,p,f,_,m,g){let y=e,b=g,w=0,v=!1;for(;void 0!==(b=b.get(lt))&&!v;){const t=b.get(e);if(w+=1,void 0!==t){if(t===w)throw new RangeError("Cyclic object value");v=!0}void 0===b.get(lt)&&(w=0)}if("function"==typeof c?y=c(t,y):y instanceof Date?y=h?.(y):"comma"===n&&Le(y)&&(y=st(y,(function(e){return e instanceof Date?h?.(e):e}))),null===y){if(o)return l&&!_?l(t,at.encoder,m,"key",p):t;y=""}if(function(e){return"string"==typeof e||"number"==typeof e||"boolean"==typeof e||"symbol"==typeof e||"bigint"==typeof e}(y)||function(e){return!(!e||"object"!=typeof e||!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e)))}(y)){if(l){const e=_?t:l(t,at.encoder,m,"key",p);return[f?.(e)+"="+f?.(l(y,at.encoder,m,"value",p))]}return[f?.(t)+"="+f?.(String(y))]}const x=[];if(void 0===y)return x;let S;if("comma"===n&&Le(y))_&&l&&(y=st(y,l)),S=[{value:y.length>0?y.join(",")||null:void 0}];else if(Le(c))S=c;else{const e=Object.keys(y);S=u?e.sort(u):e}const k=a?String(t).replace(/\./g,"%2E"):String(t),$=s&&Le(y)&&1===y.length?k+"[]":k;if(r&&Le(y)&&0===y.length)return $+"[]";for(let t=0;t0?d+u:""}let dt,ht;function pt(e){let t;return(dt??(t=new globalThis.TextEncoder,dt=t.encode.bind(t)))(e)}function ft(e){let t;return(ht??(t=new globalThis.TextDecoder,ht=t.decode.bind(t)))(e)}var _t,mt;class gt{constructor(){_t.set(this,void 0),mt.set(this,void 0),_e(this,_t,new Uint8Array),_e(this,mt,null)}decode(e){if(null==e)return[];const t=e instanceof ArrayBuffer?new Uint8Array(e):"string"==typeof e?pt(e):e;_e(this,_t,function(e){let t=0;for(const n of e)t+=n.length;const n=new Uint8Array(t);let s=0;for(const t of e)n.set(t,s),s+=t.length;return n}([me(this,_t,"f"),t]));const n=[];let s;for(;null!=(s=yt(me(this,_t,"f"),me(this,mt,"f")));){if(s.carriage&&null==me(this,mt,"f")){_e(this,mt,s.index);continue}if(null!=me(this,mt,"f")&&(s.index!==me(this,mt,"f")+1||s.carriage)){n.push(ft(me(this,_t,"f").subarray(0,me(this,mt,"f")-1))),_e(this,_t,me(this,_t,"f").subarray(me(this,mt,"f"))),_e(this,mt,null);continue}const e=null!==me(this,mt,"f")?s.preceding-1:s.preceding,t=ft(me(this,_t,"f").subarray(0,e));n.push(t),_e(this,_t,me(this,_t,"f").subarray(s.index)),_e(this,mt,null)}return n}flush(){return me(this,_t,"f").length?this.decode("\n"):[]}}function yt(e,t){for(let n=t??0;n{var s,r;if(e)return s=wt,r=e,Object.prototype.hasOwnProperty.call(s,r)?e:void At(n).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(wt))}`)};function xt(){}function St(e,t,n){return!t||wt[e]>wt[n]?xt:t[e].bind(t)}const kt={error:xt,warn:xt,info:xt,debug:xt};let $t=new WeakMap;function At(e){const t=e.logger,n=e.logLevel??"off";if(!t)return kt;const s=$t.get(t);if(s&&s[0]===n)return s[1];const r={error:St("error",t,n),warn:St("warn",t,n),info:St("info",t,n),debug:St("debug",t,n)};return $t.set(t,[n,r]),r}const It=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map((([e,t])=>[e,"authorization"===e.toLowerCase()||"cookie"===e.toLowerCase()||"set-cookie"===e.toLowerCase()?"***":t])))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);var Ot,Rt,Pt;class Ct{constructor(e,t,n){this.iterator=e,Ot.set(this,void 0),this.controller=t,_e(this,Ot,n)}static fromSSEResponse(e,t,n){let s=!1;const r=n?At(n):console;return new Ct((async function*(){if(s)throw new we("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");s=!0;let n=!1;try{for await(const s of async function*(e,t){if(!e.body){if(t.abort(),void 0!==globalThis.navigator&&"ReactNative"===globalThis.navigator.product)throw new we("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api");throw new we("Attempted to iterate over a response with no body")}const n=new Et,s=new gt,r=ze(e.body);for await(const e of async function*(e){let t=new Uint8Array;for await(const n of e){if(null==n)continue;const e=n instanceof ArrayBuffer?new Uint8Array(n):"string"==typeof n?pt(n):n;let s,r=new Uint8Array(t.length+e.length);for(r.set(t),r.set(e,t.length),t=r;-1!==(s=bt(t));)yield t.slice(0,s),t=t.slice(s)}t.length>0&&(yield t)}(r))for(const t of s.decode(e)){const e=n.decode(t);e&&(yield e)}for(const e of s.flush()){const t=n.decode(e);t&&(yield t)}}(e,t))if(!n)if(s.data.startsWith("[DONE]"))n=!0;else if(null!==s.event&&s.event.startsWith("thread.")){let e;try{e=JSON.parse(s.data)}catch(e){throw console.error("Could not parse message into JSON:",s.data),console.error("From chunk:",s.raw),e}if("error"==s.event)throw new ve(void 0,e.error,e.message,void 0);yield{event:s.event,data:e}}else{let t;try{t=JSON.parse(s.data)}catch(e){throw r.error("Could not parse message into JSON:",s.data),r.error("From chunk:",s.raw),e}if(t&&t.error)throw new ve(void 0,t.error,void 0,e.headers);yield t}n=!0}catch(e){if(ye(e))return;throw e}finally{n||t.abort()}}),t,n)}static fromReadableStream(e,t,n){let s=!1;return new Ct((async function*(){if(s)throw new we("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");s=!0;let n=!1;try{for await(const t of async function*(){const t=new gt,n=ze(e);for await(const e of n)for(const n of t.decode(e))yield n;for(const e of t.flush())yield e}())n||t&&(yield JSON.parse(t));n=!0}catch(e){if(ye(e))return;throw e}finally{n||t.abort()}}),t,n)}[(Ot=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){const e=[],t=[],n=this.iterator(),s=s=>({next:()=>{if(0===s.length){const s=n.next();e.push(s),t.push(s)}return s.shift()}});return[new Ct((()=>s(e)),this.controller,me(this,Ot,"f")),new Ct((()=>s(t)),this.controller,me(this,Ot,"f"))]}toReadableStream(){const e=this;let t;return Je({async start(){t=e[Symbol.asyncIterator]()},async pull(e){try{const{value:n,done:s}=await t.next();if(s)return e.close();const r=pt(JSON.stringify(n)+"\n");e.enqueue(r)}catch(t){e.error(t)}},async cancel(){await(t.return?.())}})}}class Et{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;const e={event:this.event,data:this.data.join("\n"),raw:this.chunks};return this.event=null,this.data=[],this.chunks=[],e}if(this.chunks.push(e),e.startsWith(":"))return null;let[t,n,s]=function(e,t){const n=e.indexOf(t);if(-1!==n)return[e.substring(0,n),t,e.substring(n+t.length)];return[e,"",""]}(e,":");return s.startsWith(" ")&&(s=s.substring(1)),"event"===t?this.event=s:"data"===t&&this.data.push(s),null}}async function Tt(e,t){const{response:n,requestLogID:s,retryOfRequestLogID:r,startTime:o}=t,i=await(async()=>{if(t.options.stream)return At(e).debug("response",n.status,n.url,n.headers,n.body),t.options.__streamClass?t.options.__streamClass.fromSSEResponse(n,t.controller,e):Ct.fromSSEResponse(n,t.controller,e);if(204===n.status)return null;if(t.options.__binaryResponse)return n;const s=n.headers.get("content-type"),r=s?.split(";")[0]?.trim();if(r?.includes("application/json")||r?.endsWith("+json")){return jt(await n.json(),n)}return await n.text()})();return At(e).debug(`[${s}] response parsed`,It({retryOfRequestLogID:r,url:n.url,status:n.status,body:i,durationMs:Date.now()-o})),i}function jt(e,t){return!e||"object"!=typeof e||Array.isArray(e)?e:Object.defineProperty(e,"_request_id",{value:t.headers.get("x-request-id"),enumerable:!1})}class Mt extends Promise{constructor(e,t,n=Tt){super((e=>{e(null)})),this.responsePromise=t,this.parseResponse=n,Rt.set(this,void 0),_e(this,Rt,e)}_thenUnwrap(e){return new Mt(me(this,Rt,"f"),this.responsePromise,(async(t,n)=>jt(e(await this.parseResponse(t,n),n),n.response)))}asResponse(){return this.responsePromise.then((e=>e.response))}async withResponse(){const[e,t]=await Promise.all([this.parse(),this.asResponse()]);return{data:e,response:t,request_id:t.headers.get("x-request-id")}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then((e=>this.parseResponse(me(this,Rt,"f"),e)))),this.parsedPromise}then(e,t){return this.parse().then(e,t)}catch(e){return this.parse().catch(e)}finally(e){return this.parse().finally(e)}}Rt=new WeakMap;class Nt{constructor(e,t,n,s){Pt.set(this,void 0),_e(this,Pt,e),this.options=s,this.response=t,this.body=n}hasNextPage(){return!!this.getPaginatedItems().length&&null!=this.nextPageRequestOptions()}async getNextPage(){const e=this.nextPageRequestOptions();if(!e)throw new we("No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.");return await me(this,Pt,"f").requestAPIList(this.constructor,e)}async*iterPages(){let e=this;for(yield e;e.hasNextPage();)e=await e.getNextPage(),yield e}async*[(Pt=new WeakMap,Symbol.asyncIterator)](){for await(const e of this.iterPages())for(const t of e.getPaginatedItems())yield t}}class Lt extends Mt{constructor(e,t,n){super(e,t,(async(e,t)=>new n(e,t.response,await Tt(e,t),t.options)))}async*[Symbol.asyncIterator](){const e=await(this);for await(const t of e)yield t}}class Dt extends Nt{constructor(e,t,n,s){super(e,t,n,s),this.data=n.data||[],this.object=n.object}getPaginatedItems(){return this.data??[]}nextPageRequestOptions(){return null}}class qt extends Nt{constructor(e,t,n,s){super(e,t,n,s),this.data=n.data||[],this.has_more=n.has_more||!1}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.getPaginatedItems(),t=e[e.length-1]?.id;return t?{...this.options,query:{...qe(this.options.query),after:t}}:null}}class Wt extends Nt{constructor(e,t,n,s){super(e,t,n,s),this.data=n.data||[],this.has_more=n.has_more||!1,this.last_id=n.last_id||""}getPaginatedItems(){return this.data??[]}hasNextPage(){return!1!==this.has_more&&super.hasNextPage()}nextPageRequestOptions(){const e=this.last_id;return e?{...this.options,query:{...qe(this.options.query),after:e}}:null}}const Bt=()=>{if("undefined"==typeof File){const{process:e}=globalThis,t="string"==typeof e?.versions?.node&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};function Ut(e,t,n){return Bt(),new File(e,t??"unknown_file",n)}function Ft(e){return("object"==typeof e&&null!==e&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}const Ht=e=>null!=e&&"object"==typeof e&&"function"==typeof e[Symbol.asyncIterator],Xt=async(e,t)=>({...e,body:await Jt(e.body,t)}),Kt=new WeakMap;const Jt=async(e,t)=>{if(!await function(e){const t="function"==typeof e?e:e.fetch,n=Kt.get(t);if(n)return n;const s=(async()=>{try{const e="Response"in t?t.Response:(await t("data:,")).constructor,n=new FormData;return n.toString()!==await new e(n).text()}catch{return!0}})();return Kt.set(t,s),s}(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");const n=new FormData;return await Promise.all(Object.entries(e||{}).map((([e,t])=>Vt(n,e,t)))),n},Vt=async(e,t,n)=>{if(void 0!==n){if(null==n)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if("string"==typeof n||"number"==typeof n||"boolean"==typeof n)e.append(t,String(n));else if(n instanceof Response)e.append(t,Ut([await n.blob()],Ft(n)));else if(Ht(n))e.append(t,Ut([await new Response(Ve(n)).blob()],Ft(n)));else if((e=>e instanceof Blob&&"name"in e)(n))e.append(t,n,Ft(n));else if(Array.isArray(n))await Promise.all(n.map((n=>Vt(e,t+"[]",n))));else{if("object"!=typeof n)throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${n} instead`);await Promise.all(Object.entries(n).map((([n,s])=>Vt(e,`${t}[${n}]`,s))))}}},zt=e=>null!=e&&"object"==typeof e&&"number"==typeof e.size&&"string"==typeof e.type&&"function"==typeof e.text&&"function"==typeof e.slice&&"function"==typeof e.arrayBuffer;async function Gt(e){let t=[];if("string"==typeof e||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(zt(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else{if(!Ht(e)){const t=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${t?`; constructor: ${t}`:""}${function(e){if("object"!=typeof e||null===e)return"";const t=Object.getOwnPropertyNames(e);return`; props: [${t.map((e=>`"${e}"`)).join(", ")}]`}(e)}`)}for await(const n of e)t.push(...await Gt(n))}return t}class Qt{constructor(e){this._client=e}}function Yt(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}const Zt=Object.freeze(Object.create(null)),en=(e=Yt)=>function(t,...n){if(1===t.length)return t[0];let s=!1;const r=[],o=t.reduce(((t,o,i)=>{/[?#]/.test(o)&&(s=!0);const a=n[i];let l=(s?encodeURIComponent:e)(""+a);return i!==n.length&&(null==a||"object"==typeof a&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Zt)??Zt)?.toString)&&(l=a+"",r.push({start:t.length+o.length,length:l.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),t+o+(i===n.length?"":l)}),""),i=o.split(/[?#]/,1)[0],a=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;let l;for(;null!==(l=a.exec(i));)r.push({start:l.index,length:l[0].length,error:`Value "${l[0]}" can't be safely passed as a path parameter`});if(r.sort(((e,t)=>e.start-t.start)),r.length>0){let e=0;const t=r.reduce(((t,n)=>{const s=" ".repeat(n.start-e),r="^".repeat(n.length);return e=n.start+n.length,t+s+r}),"");throw new we(`Path parameters result in path with invalid segments:\n${r.map((e=>e.error)).join("\n")}\n${o}\n${t}`)}return o},tn=en(Yt);let nn=class extends Qt{list(e,t={},n){return this._client.getAPIList(tn`/chat/completions/${e}/messages`,qt,{query:t,...n})}};function sn(e){return void 0!==e&&"function"in e&&void 0!==e.function}function rn(e){return"auto-parseable-response-format"===e?.$brand}function on(e){return"auto-parseable-tool"===e?.$brand}function an(e,t){const n=e.choices.map((e=>{if("length"===e.finish_reason)throw new Te;if("content_filter"===e.finish_reason)throw new je;return dn(e.message.tool_calls),{...e,message:{...e.message,...e.message.tool_calls?{tool_calls:e.message.tool_calls?.map((e=>function(e,t){const n=e.tools?.find((e=>sn(e)&&e.function?.name===t.function.name));return{...t,function:{...t.function,parsed_arguments:on(n)?n.$parseRaw(t.function.arguments):n?.function.strict?JSON.parse(t.function.arguments):null}}}(t,e)))??void 0}:void 0,parsed:e.message.content&&!e.message.refusal?ln(t,e.message.content):null}}}));return{...e,choices:n}}function ln(e,t){if("json_schema"!==e.response_format?.type)return null;if("json_schema"===e.response_format?.type){if("$parseRaw"in e.response_format){return e.response_format.$parseRaw(t)}return JSON.parse(t)}return null}function cn(e,t){if(!e||!("tools"in e)||!e.tools)return!1;const n=e.tools?.find((e=>sn(e)&&e.function?.name===t.function.name));return sn(n)&&(on(n)||n?.function.strict||!1)}function un(e){return!!rn(e.response_format)||(e.tools?.some((e=>on(e)||"function"===e.type&&!0===e.function.strict))??!1)}function dn(e){for(const t of e||[])if("function"!==t.type)throw new we(`Currently only \`function\` tool calls are supported; Received \`${t.type}\``)}const hn=e=>"assistant"===e?.role,pn=e=>"tool"===e?.role;var fn,_n,mn,gn,yn,bn,wn,vn,xn,Sn,kn,$n,An,In,On,Rn,Pn,Cn,En,Tn,jn;class Mn{constructor(){fn.add(this),this.controller=new AbortController,_n.set(this,void 0),mn.set(this,(()=>{})),gn.set(this,(()=>{})),yn.set(this,void 0),bn.set(this,(()=>{})),wn.set(this,(()=>{})),vn.set(this,{}),xn.set(this,!1),Sn.set(this,!1),kn.set(this,!1),$n.set(this,!1),_e(this,_n,new Promise(((e,t)=>{_e(this,mn,e),_e(this,gn,t)}))),_e(this,yn,new Promise(((e,t)=>{_e(this,bn,e),_e(this,wn,t)}))),me(this,_n,"f").catch((()=>{})),me(this,yn,"f").catch((()=>{}))}_run(e){setTimeout((()=>{e().then((()=>{this._emitFinal(),this._emit("end")}),me(this,fn,"m",An).bind(this))}),0)}_connected(){this.ended||(me(this,mn,"f").call(this),this._emit("connect"))}get ended(){return me(this,xn,"f")}get errored(){return me(this,Sn,"f")}get aborted(){return me(this,kn,"f")}abort(){this.controller.abort()}on(e,t){return(me(this,vn,"f")[e]||(me(this,vn,"f")[e]=[])).push({listener:t}),this}off(e,t){const n=me(this,vn,"f")[e];if(!n)return this;const s=n.findIndex((e=>e.listener===t));return s>=0&&n.splice(s,1),this}once(e,t){return(me(this,vn,"f")[e]||(me(this,vn,"f")[e]=[])).push({listener:t,once:!0}),this}emitted(e){return new Promise(((t,n)=>{_e(this,$n,!0),"error"!==e&&this.once("error",n),this.once(e,t)}))}async done(){_e(this,$n,!0),await me(this,yn,"f")}_emit(e,...t){if(me(this,xn,"f"))return;"end"===e&&(_e(this,xn,!0),me(this,bn,"f").call(this));const n=me(this,vn,"f")[e];if(n&&(me(this,vn,"f")[e]=n.filter((e=>!e.once)),n.forEach((({listener:e})=>e(...t)))),"abort"===e){const e=t[0];return me(this,$n,"f")||n?.length||Promise.reject(e),me(this,gn,"f").call(this,e),me(this,wn,"f").call(this,e),void this._emit("end")}if("error"===e){const e=t[0];me(this,$n,"f")||n?.length||Promise.reject(e),me(this,gn,"f").call(this,e),me(this,wn,"f").call(this,e),this._emit("end")}}_emitFinal(){}}function Nn(e){return"function"==typeof e.parse}_n=new WeakMap,mn=new WeakMap,gn=new WeakMap,yn=new WeakMap,bn=new WeakMap,wn=new WeakMap,vn=new WeakMap,xn=new WeakMap,Sn=new WeakMap,kn=new WeakMap,$n=new WeakMap,fn=new WeakSet,An=function(e){if(_e(this,Sn,!0),e instanceof Error&&"AbortError"===e.name&&(e=new xe),e instanceof xe)return _e(this,kn,!0),this._emit("abort",e);if(e instanceof we)return this._emit("error",e);if(e instanceof Error){const t=new we(e.message);return t.cause=e,this._emit("error",t)}return this._emit("error",new we(String(e)))};const Ln=10;class Dn extends Mn{constructor(){super(...arguments),In.add(this),this._chatCompletions=[],this.messages=[]}_addChatCompletion(e){this._chatCompletions.push(e),this._emit("chatCompletion",e);const t=e.choices[0]?.message;return t&&this._addMessage(t),e}_addMessage(e,t=!0){if("content"in e||(e.content=null),this.messages.push(e),t)if(this._emit("message",e),pn(e)&&e.content)this._emit("functionToolCallResult",e.content);else if(hn(e)&&e.tool_calls)for(const t of e.tool_calls)"function"===t.type&&this._emit("functionToolCall",t.function)}async finalChatCompletion(){await this.done();const e=this._chatCompletions[this._chatCompletions.length-1];if(!e)throw new we("stream ended without producing a ChatCompletion");return e}async finalContent(){return await this.done(),me(this,In,"m",On).call(this)}async finalMessage(){return await this.done(),me(this,In,"m",Rn).call(this)}async finalFunctionToolCall(){return await this.done(),me(this,In,"m",Pn).call(this)}async finalFunctionToolCallResult(){return await this.done(),me(this,In,"m",Cn).call(this)}async totalUsage(){return await this.done(),me(this,In,"m",En).call(this)}allChatCompletions(){return[...this._chatCompletions]}_emitFinal(){const e=this._chatCompletions[this._chatCompletions.length-1];e&&this._emit("finalChatCompletion",e);const t=me(this,In,"m",Rn).call(this);t&&this._emit("finalMessage",t);const n=me(this,In,"m",On).call(this);n&&this._emit("finalContent",n);const s=me(this,In,"m",Pn).call(this);s&&this._emit("finalFunctionToolCall",s);const r=me(this,In,"m",Cn).call(this);null!=r&&this._emit("finalFunctionToolCallResult",r),this._chatCompletions.some((e=>e.usage))&&this._emit("totalUsage",me(this,In,"m",En).call(this))}async _createChatCompletion(e,t,n){const s=n?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),me(this,In,"m",Tn).call(this,t);const r=await e.chat.completions.create({...t,stream:!1},{...n,signal:this.controller.signal});return this._connected(),this._addChatCompletion(an(r,t))}async _runChatCompletion(e,t,n){for(const e of t.messages)this._addMessage(e,!1);return await this._createChatCompletion(e,t,n)}async _runTools(e,t,n){const s="tool",{tool_choice:r="auto",stream:o,...i}=t,a="string"!=typeof r&&"function"===r.type&&r?.function?.name,{maxChatCompletions:l=Ln}=n||{},c=t.tools.map((e=>{if(on(e)){if(!e.$callback)throw new we("Tool given to `.runTools()` that does not have an associated function");return{type:"function",function:{function:e.$callback,name:e.function.name,description:e.function.description||"",parameters:e.function.parameters,parse:e.$parseRaw,strict:!0}}}return e})),u={};for(const e of c)"function"===e.type&&(u[e.function.name||e.function.function.name]=e.function);const d="tools"in t?c.map((e=>"function"===e.type?{type:"function",function:{name:e.function.name||e.function.function.name,parameters:e.function.parameters,description:e.function.description,strict:e.function.strict}}:e)):void 0;for(const e of t.messages)this._addMessage(e,!1);for(let t=0;tJSON.stringify(e))).join(", ")}. Please try again`;this._addMessage({role:s,tool_call_id:t,content:e});continue}if(a&&a!==n){const e=`Invalid tool_call: ${JSON.stringify(n)}. ${JSON.stringify(a)} requested. Please try again`;this._addMessage({role:s,tool_call_id:t,content:e});continue}let i;try{i=Nn(o)?await o.parse(r):r}catch(e){const n=e instanceof Error?e.message:String(e);this._addMessage({role:s,tool_call_id:t,content:n});continue}const l=await o.function(i,this),c=me(this,In,"m",jn).call(this,l);if(this._addMessage({role:s,tool_call_id:t,content:c}),a)return}}}}In=new WeakSet,On=function(){return me(this,In,"m",Rn).call(this).content??null},Rn=function(){let e=this.messages.length;for(;e-- >0;){const t=this.messages[e];if(hn(t)){return{...t,content:t.content??null,refusal:t.refusal??null}}}throw new we("stream ended without producing a ChatCompletionMessage with role=assistant")},Pn=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(hn(t)&&t?.tool_calls?.length)return t.tool_calls.filter((e=>"function"===e.type)).at(-1)?.function}},Cn=function(){for(let e=this.messages.length-1;e>=0;e--){const t=this.messages[e];if(pn(t)&&null!=t.content&&"string"==typeof t.content&&this.messages.some((e=>"assistant"===e.role&&e.tool_calls?.some((e=>"function"===e.type&&e.id===t.tool_call_id)))))return t.content}},En=function(){const e={completion_tokens:0,prompt_tokens:0,total_tokens:0};for(const{usage:t}of this._chatCompletions)t&&(e.completion_tokens+=t.completion_tokens,e.prompt_tokens+=t.prompt_tokens,e.total_tokens+=t.total_tokens);return e},Tn=function(e){if(null!=e.n&&e.n>1)throw new we("ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.")},jn=function(e){return"string"==typeof e?e:void 0===e?"undefined":JSON.stringify(e)};class qn extends Dn{static runTools(e,t,n){const s=new qn,r={...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run((()=>s._runTools(e,t,r))),s}_addMessage(e,t=!0){super._addMessage(e,t),hn(e)&&e.content&&this._emit("content",e.content)}}const Wn=1,Bn=2,Un=4,Fn=8,Hn=16,Xn=32,Kn=64,Jn=128,Vn=256,zn=511;class Gn extends Error{}class Qn extends Error{}const Yn=(e,t)=>{const n=e.length;let s=0;const r=e=>{throw new Gn(`${e} at position ${s}`)},o=e=>{throw new Qn(`${e} at position ${s}`)},i=()=>(d(),s>=n&&r("Unexpected end of input"),'"'===e[s]?a():"{"===e[s]?l():"["===e[s]?c():"null"===e.substring(s,s+4)||Hn&t&&n-s<4&&"null".startsWith(e.substring(s))?(s+=4,null):"true"===e.substring(s,s+4)||Xn&t&&n-s<4&&"true".startsWith(e.substring(s))?(s+=4,!0):"false"===e.substring(s,s+5)||Xn&t&&n-s<5&&"false".startsWith(e.substring(s))?(s+=5,!1):"Infinity"===e.substring(s,s+8)||Jn&t&&n-s<8&&"Infinity".startsWith(e.substring(s))?(s+=8,1/0):"-Infinity"===e.substring(s,s+9)||Vn&t&&1{const i=s;let a=!1;for(s++;s{s++,d();const o={};try{for(;"}"!==e[s];){if(d(),s>=n&&Fn&t)return o;const r=a();d(),s++;try{const e=i();Object.defineProperty(o,r,{value:e,writable:!0,enumerable:!0,configurable:!0})}catch(e){if(Fn&t)return o;throw e}d(),","===e[s]&&s++}}catch(e){if(Fn&t)return o;r("Expected '}' at end of object")}return s++,o},c=()=>{s++;const n=[];try{for(;"]"!==e[s];)n.push(i()),d(),","===e[s]&&s++}catch(e){if(Un&t)return n;r("Expected ']' at end of array")}return s++,n},u=()=>{if(0===s){"-"===e&&Bn&t&&r("Not sure what '-' is");try{return JSON.parse(e)}catch(n){if(Bn&t)try{return"."===e[e.length-1]?JSON.parse(e.substring(0,e.lastIndexOf("."))):JSON.parse(e.substring(0,e.lastIndexOf("e")))}catch(e){}o(String(n))}}const i=s;for("-"===e[s]&&s++;e[s]&&!",]}".includes(e[s]);)s++;s!=n||Bn&t||r("Unterminated number literal");try{return JSON.parse(e.substring(i,s))}catch(n){"-"===e.substring(i,s)&&Bn&t&&r("Not sure what '-' is");try{return JSON.parse(e.substring(i,e.lastIndexOf("e")))}catch(e){o(String(e))}}},d=()=>{for(;sfunction(e,t=zn){if("string"!=typeof e)throw new TypeError("expecting str, got "+typeof e);if(!e.trim())throw new Error(`${e} is empty`);return Yn(e.trim(),t)}(e,zn^Bn);var es,ts,ns,ss,rs,os,is,as,ls,cs,us,ds;class hs extends Dn{constructor(e){super(),es.add(this),ts.set(this,void 0),ns.set(this,void 0),ss.set(this,void 0),_e(this,ts,e),_e(this,ns,[])}get currentChatCompletionSnapshot(){return me(this,ss,"f")}static fromReadableStream(e){const t=new hs(null);return t._run((()=>t._fromReadableStream(e))),t}static createChatCompletion(e,t,n){const s=new hs(t);return s._run((()=>s._runChatCompletion(e,{...t,stream:!0},{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),s}async _createChatCompletion(e,t,n){super._createChatCompletion;const s=n?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),me(this,es,"m",rs).call(this);const r=await e.chat.completions.create({...t,stream:!0},{...n,signal:this.controller.signal});this._connected();for await(const e of r)me(this,es,"m",is).call(this,e);if(r.controller.signal?.aborted)throw new xe;return this._addChatCompletion(me(this,es,"m",cs).call(this))}async _fromReadableStream(e,t){const n=t?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),me(this,es,"m",rs).call(this),this._connected();const s=Ct.fromReadableStream(e,this.controller);let r;for await(const e of s)r&&r!==e.id&&this._addChatCompletion(me(this,es,"m",cs).call(this)),me(this,es,"m",is).call(this,e),r=e.id;if(s.controller.signal?.aborted)throw new xe;return this._addChatCompletion(me(this,es,"m",cs).call(this))}[(ts=new WeakMap,ns=new WeakMap,ss=new WeakMap,es=new WeakSet,rs=function(){this.ended||_e(this,ss,void 0)},os=function(e){let t=me(this,ns,"f")[e.index];return t||(t={content_done:!1,refusal_done:!1,logprobs_content_done:!1,logprobs_refusal_done:!1,done_tool_calls:new Set,current_tool_call_index:null},me(this,ns,"f")[e.index]=t,t)},is=function(e){if(this.ended)return;const t=me(this,es,"m",ds).call(this,e);this._emit("chunk",e,t);for(const n of e.choices){const e=t.choices[n.index];null!=n.delta.content&&"assistant"===e.message?.role&&e.message?.content&&(this._emit("content",n.delta.content,e.message.content),this._emit("content.delta",{delta:n.delta.content,snapshot:e.message.content,parsed:e.message.parsed})),null!=n.delta.refusal&&"assistant"===e.message?.role&&e.message?.refusal&&this._emit("refusal.delta",{delta:n.delta.refusal,snapshot:e.message.refusal}),null!=n.logprobs?.content&&"assistant"===e.message?.role&&this._emit("logprobs.content.delta",{content:n.logprobs?.content,snapshot:e.logprobs?.content??[]}),null!=n.logprobs?.refusal&&"assistant"===e.message?.role&&this._emit("logprobs.refusal.delta",{refusal:n.logprobs?.refusal,snapshot:e.logprobs?.refusal??[]});const s=me(this,es,"m",os).call(this,e);e.finish_reason&&(me(this,es,"m",ls).call(this,e),null!=s.current_tool_call_index&&me(this,es,"m",as).call(this,e,s.current_tool_call_index));for(const t of n.delta.tool_calls??[])s.current_tool_call_index!==t.index&&(me(this,es,"m",ls).call(this,e),null!=s.current_tool_call_index&&me(this,es,"m",as).call(this,e,s.current_tool_call_index)),s.current_tool_call_index=t.index;for(const t of n.delta.tool_calls??[]){const n=e.message.tool_calls?.[t.index];n?.type&&("function"===n?.type&&this._emit("tool_calls.function.arguments.delta",{name:n.function?.name,index:t.index,arguments:n.function.arguments,parsed_arguments:n.function.parsed_arguments,arguments_delta:t.function?.arguments??""}))}}},as=function(e,t){if(me(this,es,"m",os).call(this,e).done_tool_calls.has(t))return;const n=e.message.tool_calls?.[t];if(!n)throw new Error("no tool call snapshot");if(!n.type)throw new Error("tool call snapshot missing `type`");if("function"===n.type){const e=me(this,ts,"f")?.tools?.find((e=>sn(e)&&e.function.name===n.function.name));this._emit("tool_calls.function.arguments.done",{name:n.function.name,index:t,arguments:n.function.arguments,parsed_arguments:on(e)?e.$parseRaw(n.function.arguments):e?.function.strict?JSON.parse(n.function.arguments):null})}else n.type},ls=function(e){const t=me(this,es,"m",os).call(this,e);if(e.message.content&&!t.content_done){t.content_done=!0;const n=me(this,es,"m",us).call(this);this._emit("content.done",{content:e.message.content,parsed:n?n.$parseRaw(e.message.content):null})}e.message.refusal&&!t.refusal_done&&(t.refusal_done=!0,this._emit("refusal.done",{refusal:e.message.refusal})),e.logprobs?.content&&!t.logprobs_content_done&&(t.logprobs_content_done=!0,this._emit("logprobs.content.done",{content:e.logprobs.content})),e.logprobs?.refusal&&!t.logprobs_refusal_done&&(t.logprobs_refusal_done=!0,this._emit("logprobs.refusal.done",{refusal:e.logprobs.refusal}))},cs=function(){if(this.ended)throw new we("stream has ended, this shouldn't happen");const e=me(this,ss,"f");if(!e)throw new we("request ended without sending any chunks");return _e(this,ss,void 0),_e(this,ns,[]),function(e,t){const{id:n,choices:s,created:r,model:o,system_fingerprint:i,...a}=e,l={...a,id:n,choices:s.map((({message:t,finish_reason:n,index:s,logprobs:r,...o})=>{if(!n)throw new we(`missing finish_reason for choice ${s}`);const{content:i=null,function_call:a,tool_calls:l,...c}=t,u=t.role;if(!u)throw new we(`missing role for choice ${s}`);if(a){const{arguments:e,name:l}=a;if(null==e)throw new we(`missing function_call.arguments for choice ${s}`);if(!l)throw new we(`missing function_call.name for choice ${s}`);return{...o,message:{content:i,function_call:{arguments:e,name:l},role:u,refusal:t.refusal??null},finish_reason:n,index:s,logprobs:r}}return l?{...o,index:s,finish_reason:n,logprobs:r,message:{...c,role:u,content:i,refusal:t.refusal??null,tool_calls:l.map(((t,n)=>{const{function:r,type:o,id:i,...a}=t,{arguments:l,name:c,...u}=r||{};if(null==i)throw new we(`missing choices[${s}].tool_calls[${n}].id\n${ps(e)}`);if(null==o)throw new we(`missing choices[${s}].tool_calls[${n}].type\n${ps(e)}`);if(null==c)throw new we(`missing choices[${s}].tool_calls[${n}].function.name\n${ps(e)}`);if(null==l)throw new we(`missing choices[${s}].tool_calls[${n}].function.arguments\n${ps(e)}`);return{...a,id:i,type:o,function:{...u,name:c,arguments:l}}}))}}:{...o,message:{...c,content:i,role:u,refusal:t.refusal??null},finish_reason:n,index:s,logprobs:r}})),created:r,model:o,object:"chat.completion",...i?{system_fingerprint:i}:{}};return function(e,t){return t&&un(t)?an(e,t):{...e,choices:e.choices.map((e=>(dn(e.message.tool_calls),{...e,message:{...e.message,parsed:null,...e.message.tool_calls?{tool_calls:e.message.tool_calls}:void 0}})))}}(l,t)}(e,me(this,ts,"f"))},us=function(){const e=me(this,ts,"f")?.response_format;return rn(e)?e:null},ds=function(e){var t,n,s,r;let o=me(this,ss,"f");const{choices:i,...a}=e;o?Object.assign(o,a):o=_e(this,ss,{...a,choices:[]});for(const{delta:i,finish_reason:a,index:l,logprobs:c=null,...u}of e.choices){let e=o.choices[l];if(e||(e=o.choices[l]={finish_reason:a,index:l,message:{},logprobs:c,...u}),c)if(e.logprobs){const{content:s,refusal:r,...o}=c;Object.assign(e.logprobs,o),s&&((t=e.logprobs).content??(t.content=[]),e.logprobs.content.push(...s)),r&&((n=e.logprobs).refusal??(n.refusal=[]),e.logprobs.refusal.push(...r))}else e.logprobs=Object.assign({},c);if(a&&(e.finish_reason=a,me(this,ts,"f")&&un(me(this,ts,"f")))){if("length"===a)throw new Te;if("content_filter"===a)throw new je}if(Object.assign(e,u),!i)continue;const{content:d,refusal:h,function_call:p,role:f,tool_calls:_,...m}=i;if(Object.assign(e.message,m),h&&(e.message.refusal=(e.message.refusal||"")+h),f&&(e.message.role=f),p&&(e.message.function_call?(p.name&&(e.message.function_call.name=p.name),p.arguments&&((s=e.message.function_call).arguments??(s.arguments=""),e.message.function_call.arguments+=p.arguments)):e.message.function_call=p),d&&(e.message.content=(e.message.content||"")+d,!e.message.refusal&&me(this,es,"m",us).call(this)&&(e.message.parsed=Zn(e.message.content))),_){e.message.tool_calls||(e.message.tool_calls=[]);for(const{index:t,id:n,type:s,function:o,...i}of _){const a=(r=e.message.tool_calls)[t]??(r[t]={});Object.assign(a,i),n&&(a.id=n),s&&(a.type=s),o&&(a.function??(a.function={name:o.name??"",arguments:""})),o?.name&&(a.function.name=o.name),o?.arguments&&(a.function.arguments+=o.arguments,cn(me(this,ts,"f"),a)&&(a.function.parsed_arguments=Zn(a.function.arguments)))}}}return o},Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("chunk",(n=>{const s=t.shift();s?s.resolve(n):e.push(n)})),this.on("end",(()=>{n=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),this.on("error",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),{next:async()=>{if(!e.length)return n?{value:void 0,done:!0}:new Promise(((e,n)=>t.push({resolve:e,reject:n}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}toReadableStream(){return new Ct(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}}function ps(e){return JSON.stringify(e)}class fs extends hs{static fromReadableStream(e){const t=new fs(null);return t._run((()=>t._fromReadableStream(e))),t}static runTools(e,t,n){const s=new fs(t),r={...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"runTools"}};return s._run((()=>s._runTools(e,t,r))),s}}let _s=class extends Qt{constructor(){super(...arguments),this.messages=new nn(this._client)}create(e,t){return this._client.post("/chat/completions",{body:e,...t,stream:e.stream??!1})}retrieve(e,t){return this._client.get(tn`/chat/completions/${e}`,t)}update(e,t,n){return this._client.post(tn`/chat/completions/${e}`,{body:t,...n})}list(e={},t){return this._client.getAPIList("/chat/completions",qt,{query:e,...t})}delete(e,t){return this._client.delete(tn`/chat/completions/${e}`,t)}parse(e,t){return function(e){for(const t of e??[]){if("function"!==t.type)throw new we(`Currently only \`function\` tool types support auto-parsing; Received \`${t.type}\``);if(!0!==t.function.strict)throw new we(`The \`${t.function.name}\` tool is not marked with \`strict: true\`. Only strict function tools can be auto-parsed`)}}(e.tools),this._client.chat.completions.create(e,{...t,headers:{...t?.headers,"X-Stainless-Helper-Method":"chat.completions.parse"}})._thenUnwrap((t=>an(t,e)))}runTools(e,t){return e.stream?fs.runTools(this._client,e,t):qn.runTools(this._client,e,t)}stream(e,t){return hs.createChatCompletion(this._client,e,t)}};_s.Messages=nn;class ms extends Qt{constructor(){super(...arguments),this.completions=new _s(this._client)}}ms.Completions=_s;const gs=Symbol("brand.privateNullableHeaders");function*ys(e){if(!e)return;if(gs in e){const{values:t,nulls:n}=e;yield*t.entries();for(const e of n)yield[e,null];return}let t,n=!1;e instanceof Headers?t=e.entries():De(e)?t=e:(n=!0,t=Object.entries(e??{}));for(let e of t){const t=e[0];if("string"!=typeof t)throw new TypeError("expected header name to be a string");const s=De(e[1])?e[1]:[e[1]];let r=!1;for(const e of s)void 0!==e&&(n&&!r&&(r=!0,yield[t,null]),yield[t,e])}}const bs=e=>{const t=new Headers,n=new Set;for(const s of e){const e=new Set;for(const[r,o]of ys(s)){const s=r.toLowerCase();e.has(s)||(t.delete(r),e.add(s)),null===o?(t.delete(r),n.add(s)):(t.append(r,o),n.delete(s))}}return{[gs]:!0,values:t,nulls:n}};class ws extends Qt{create(e,t){return this._client.post("/audio/speech",{body:e,...t,headers:bs([{Accept:"application/octet-stream"},t?.headers]),__binaryResponse:!0})}}class vs extends Qt{create(e,t){return this._client.post("/audio/transcriptions",Xt({body:e,...t,stream:e.stream??!1,__metadata:{model:e.model}},this._client))}}class xs extends Qt{create(e,t){return this._client.post("/audio/translations",Xt({body:e,...t,__metadata:{model:e.model}},this._client))}}class Ss extends Qt{constructor(){super(...arguments),this.transcriptions=new vs(this._client),this.translations=new xs(this._client),this.speech=new ws(this._client)}}Ss.Transcriptions=vs,Ss.Translations=xs,Ss.Speech=ws;class ks extends Qt{create(e,t){return this._client.post("/batches",{body:e,...t})}retrieve(e,t){return this._client.get(tn`/batches/${e}`,t)}list(e={},t){return this._client.getAPIList("/batches",qt,{query:e,...t})}cancel(e,t){return this._client.post(tn`/batches/${e}/cancel`,t)}}class $s extends Qt{create(e,t){return this._client.post("/assistants",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(tn`/assistants/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,n){return this._client.post(tn`/assistants/${e}`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e={},t){return this._client.getAPIList("/assistants",qt,{query:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(tn`/assistants/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class As extends Qt{create(e,t){return this._client.post("/realtime/sessions",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}class Is extends Qt{create(e,t){return this._client.post("/realtime/transcription_sessions",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}}let Os=class extends Qt{constructor(){super(...arguments),this.sessions=new As(this._client),this.transcriptionSessions=new Is(this._client)}};Os.Sessions=As,Os.TranscriptionSessions=Is;class Rs extends Qt{create(e,t,n){return this._client.post(tn`/threads/${e}/messages`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}retrieve(e,t,n){const{thread_id:s}=t;return this._client.get(tn`/threads/${s}/messages/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}update(e,t,n){const{thread_id:s,...r}=t;return this._client.post(tn`/threads/${s}/messages/${e}`,{body:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e,t={},n){return this._client.getAPIList(tn`/threads/${e}/messages`,qt,{query:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}delete(e,t,n){const{thread_id:s}=t;return this._client.delete(tn`/threads/${s}/messages/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}}class Ps extends Qt{retrieve(e,t,n){const{thread_id:s,run_id:r,...o}=t;return this._client.get(tn`/threads/${s}/runs/${r}/steps/${e}`,{query:o,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e,t,n){const{thread_id:s,...r}=t;return this._client.getAPIList(tn`/threads/${s}/runs/${e}/steps`,qt,{query:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}}const Cs=e=>void 0!==globalThis.process?globalThis.process.env?.[e]?.trim()??void 0:void 0!==globalThis.Deno?globalThis.Deno.env?.get?.(e)?.trim():void 0;var Es,Ts,js,Ms,Ns,Ls,Ds,qs,Ws,Bs,Us,Fs,Hs,Xs,Ks,Js,Vs,zs,Gs,Qs,Ys,Zs,er;class tr extends Mn{constructor(){super(...arguments),Es.add(this),js.set(this,[]),Ms.set(this,{}),Ns.set(this,{}),Ls.set(this,void 0),Ds.set(this,void 0),qs.set(this,void 0),Ws.set(this,void 0),Bs.set(this,void 0),Us.set(this,void 0),Fs.set(this,void 0),Hs.set(this,void 0),Xs.set(this,void 0)}[(js=new WeakMap,Ms=new WeakMap,Ns=new WeakMap,Ls=new WeakMap,Ds=new WeakMap,qs=new WeakMap,Ws=new WeakMap,Bs=new WeakMap,Us=new WeakMap,Fs=new WeakMap,Hs=new WeakMap,Xs=new WeakMap,Es=new WeakSet,Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("event",(n=>{const s=t.shift();s?s.resolve(n):e.push(n)})),this.on("end",(()=>{n=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),this.on("error",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),{next:async()=>{if(!e.length)return n?{value:void 0,done:!0}:new Promise(((e,n)=>t.push({resolve:e,reject:n}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}static fromReadableStream(e){const t=new Ts;return t._run((()=>t._fromReadableStream(e))),t}async _fromReadableStream(e,t){const n=t?.signal;n&&(n.aborted&&this.controller.abort(),n.addEventListener("abort",(()=>this.controller.abort()))),this._connected();const s=Ct.fromReadableStream(e,this.controller);for await(const e of s)me(this,Es,"m",Ks).call(this,e);if(s.controller.signal?.aborted)throw new xe;return this._addRun(me(this,Es,"m",Js).call(this))}toReadableStream(){return new Ct(this[Symbol.asyncIterator].bind(this),this.controller).toReadableStream()}static createToolAssistantStream(e,t,n,s){const r=new Ts;return r._run((()=>r._runToolAssistantStream(e,t,n,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}async _createToolAssistantStream(e,t,n,s){const r=s?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...n,stream:!0},i=await e.submitToolOutputs(t,o,{...s,signal:this.controller.signal});this._connected();for await(const e of i)me(this,Es,"m",Ks).call(this,e);if(i.controller.signal?.aborted)throw new xe;return this._addRun(me(this,Es,"m",Js).call(this))}static createThreadAssistantStream(e,t,n){const s=new Ts;return s._run((()=>s._threadAssistantStream(e,t,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),s}static createAssistantStream(e,t,n,s){const r=new Ts;return r._run((()=>r._runAssistantStream(e,t,n,{...s,headers:{...s?.headers,"X-Stainless-Helper-Method":"stream"}}))),r}currentEvent(){return me(this,Fs,"f")}currentRun(){return me(this,Hs,"f")}currentMessageSnapshot(){return me(this,Ls,"f")}currentRunStepSnapshot(){return me(this,Xs,"f")}async finalRunSteps(){return await this.done(),Object.values(me(this,Ms,"f"))}async finalMessages(){return await this.done(),Object.values(me(this,Ns,"f"))}async finalRun(){if(await this.done(),!me(this,Ds,"f"))throw Error("Final run was not received.");return me(this,Ds,"f")}async _createThreadAssistantStream(e,t,n){const s=n?.signal;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort())));const r={...t,stream:!0},o=await e.createAndRun(r,{...n,signal:this.controller.signal});this._connected();for await(const e of o)me(this,Es,"m",Ks).call(this,e);if(o.controller.signal?.aborted)throw new xe;return this._addRun(me(this,Es,"m",Js).call(this))}async _createAssistantStream(e,t,n,s){const r=s?.signal;r&&(r.aborted&&this.controller.abort(),r.addEventListener("abort",(()=>this.controller.abort())));const o={...n,stream:!0},i=await e.create(t,o,{...s,signal:this.controller.signal});this._connected();for await(const e of i)me(this,Es,"m",Ks).call(this,e);if(i.controller.signal?.aborted)throw new xe;return this._addRun(me(this,Es,"m",Js).call(this))}static accumulateDelta(e,t){for(const[n,s]of Object.entries(t)){if(!e.hasOwnProperty(n)){e[n]=s;continue}let t=e[n];if(null!=t)if("index"!==n&&"type"!==n){if("string"==typeof t&&"string"==typeof s)t+=s;else if("number"==typeof t&&"number"==typeof s)t+=s;else{if(!We(t)||!We(s)){if(Array.isArray(t)&&Array.isArray(s)){if(t.every((e=>"string"==typeof e||"number"==typeof e))){t.push(...s);continue}for(const e of s){if(!We(e))throw new Error(`Expected array delta entry to be an object but got: ${e}`);const n=e.index;if(null==n)throw console.error(e),new Error("Expected array delta entry to have an `index` property");if("number"!=typeof n)throw new Error(`Expected array delta entry \`index\` property to be a number but got ${n}`);const s=t[n];null==s?t.push(e):t[n]=this.accumulateDelta(s,e)}continue}throw Error(`Unhandled record type: ${n}, deltaValue: ${s}, accValue: ${t}`)}t=this.accumulateDelta(t,s)}e[n]=t}else e[n]=s;else e[n]=s}return e}_addRun(e){return e}async _threadAssistantStream(e,t,n){return await this._createThreadAssistantStream(t,e,n)}async _runAssistantStream(e,t,n,s){return await this._createAssistantStream(t,e,n,s)}async _runToolAssistantStream(e,t,n,s){return await this._createToolAssistantStream(t,e,n,s)}}Ts=tr,Ks=function(e){if(!this.ended)switch(_e(this,Fs,e),me(this,Es,"m",Gs).call(this,e),e.event){case"thread.created":break;case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":case"thread.run.requires_action":case"thread.run.completed":case"thread.run.incomplete":case"thread.run.failed":case"thread.run.cancelling":case"thread.run.cancelled":case"thread.run.expired":me(this,Es,"m",er).call(this,e);break;case"thread.run.step.created":case"thread.run.step.in_progress":case"thread.run.step.delta":case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":me(this,Es,"m",zs).call(this,e);break;case"thread.message.created":case"thread.message.in_progress":case"thread.message.delta":case"thread.message.completed":case"thread.message.incomplete":me(this,Es,"m",Vs).call(this,e);break;case"error":throw new Error("Encountered an error event in event processing - errors should be processed earlier")}},Js=function(){if(this.ended)throw new we("stream has ended, this shouldn't happen");if(!me(this,Ds,"f"))throw Error("Final run has not been received");return me(this,Ds,"f")},Vs=function(e){const[t,n]=me(this,Es,"m",Ys).call(this,e,me(this,Ls,"f"));_e(this,Ls,t),me(this,Ns,"f")[t.id]=t;for(const e of n){const n=t.content[e.index];"text"==n?.type&&this._emit("textCreated",n.text)}switch(e.event){case"thread.message.created":this._emit("messageCreated",e.data);break;case"thread.message.in_progress":break;case"thread.message.delta":if(this._emit("messageDelta",e.data.delta,t),e.data.delta.content)for(const n of e.data.delta.content){if("text"==n.type&&n.text){let e=n.text,s=t.content[n.index];if(!s||"text"!=s.type)throw Error("The snapshot associated with this text delta is not text or missing");this._emit("textDelta",e,s.text)}if(n.index!=me(this,qs,"f")){if(me(this,Ws,"f"))switch(me(this,Ws,"f").type){case"text":this._emit("textDone",me(this,Ws,"f").text,me(this,Ls,"f"));break;case"image_file":this._emit("imageFileDone",me(this,Ws,"f").image_file,me(this,Ls,"f"))}_e(this,qs,n.index)}_e(this,Ws,t.content[n.index])}break;case"thread.message.completed":case"thread.message.incomplete":if(void 0!==me(this,qs,"f")){const t=e.data.content[me(this,qs,"f")];if(t)switch(t.type){case"image_file":this._emit("imageFileDone",t.image_file,me(this,Ls,"f"));break;case"text":this._emit("textDone",t.text,me(this,Ls,"f"))}}me(this,Ls,"f")&&this._emit("messageDone",e.data),_e(this,Ls,void 0)}},zs=function(e){const t=me(this,Es,"m",Qs).call(this,e);switch(_e(this,Xs,t),e.event){case"thread.run.step.created":this._emit("runStepCreated",e.data);break;case"thread.run.step.delta":const n=e.data.delta;if(n.step_details&&"tool_calls"==n.step_details.type&&n.step_details.tool_calls&&"tool_calls"==t.step_details.type)for(const e of n.step_details.tool_calls)e.index==me(this,Bs,"f")?this._emit("toolCallDelta",e,t.step_details.tool_calls[e.index]):(me(this,Us,"f")&&this._emit("toolCallDone",me(this,Us,"f")),_e(this,Bs,e.index),_e(this,Us,t.step_details.tool_calls[e.index]),me(this,Us,"f")&&this._emit("toolCallCreated",me(this,Us,"f")));this._emit("runStepDelta",e.data.delta,t);break;case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":_e(this,Xs,void 0);"tool_calls"==e.data.step_details.type&&me(this,Us,"f")&&(this._emit("toolCallDone",me(this,Us,"f")),_e(this,Us,void 0)),this._emit("runStepDone",e.data,t)}},Gs=function(e){me(this,js,"f").push(e),this._emit("event",e)},Qs=function(e){switch(e.event){case"thread.run.step.created":return me(this,Ms,"f")[e.data.id]=e.data,e.data;case"thread.run.step.delta":let t=me(this,Ms,"f")[e.data.id];if(!t)throw Error("Received a RunStepDelta before creation of a snapshot");let n=e.data;if(n.delta){const s=Ts.accumulateDelta(t,n.delta);me(this,Ms,"f")[e.data.id]=s}return me(this,Ms,"f")[e.data.id];case"thread.run.step.completed":case"thread.run.step.failed":case"thread.run.step.cancelled":case"thread.run.step.expired":case"thread.run.step.in_progress":me(this,Ms,"f")[e.data.id]=e.data}if(me(this,Ms,"f")[e.data.id])return me(this,Ms,"f")[e.data.id];throw new Error("No snapshot available")},Ys=function(e,t){let n=[];switch(e.event){case"thread.message.created":return[e.data,n];case"thread.message.delta":if(!t)throw Error("Received a delta with no existing snapshot (there should be one from message creation)");let s=e.data;if(s.delta.content)for(const e of s.delta.content)if(e.index in t.content){let n=t.content[e.index];t.content[e.index]=me(this,Es,"m",Zs).call(this,e,n)}else t.content[e.index]=e,n.push(e);return[t,n];case"thread.message.in_progress":case"thread.message.completed":case"thread.message.incomplete":if(t)return[t,n];throw Error("Received thread message event with no existing snapshot")}throw Error("Tried to accumulate a non-message event")},Zs=function(e,t){return Ts.accumulateDelta(t,e)},er=function(e){switch(_e(this,Hs,e.data),e.event){case"thread.run.created":case"thread.run.queued":case"thread.run.in_progress":break;case"thread.run.requires_action":case"thread.run.cancelled":case"thread.run.failed":case"thread.run.completed":case"thread.run.expired":case"thread.run.incomplete":_e(this,Ds,e.data),me(this,Us,"f")&&(this._emit("toolCallDone",me(this,Us,"f")),_e(this,Us,void 0))}};let nr=class extends Qt{constructor(){super(...arguments),this.steps=new Ps(this._client)}create(e,t,n){const{include:s,...r}=t;return this._client.post(tn`/threads/${e}/runs`,{query:{include:s},body:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers]),stream:t.stream??!1})}retrieve(e,t,n){const{thread_id:s}=t;return this._client.get(tn`/threads/${s}/runs/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}update(e,t,n){const{thread_id:s,...r}=t;return this._client.post(tn`/threads/${s}/runs/${e}`,{body:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e,t={},n){return this._client.getAPIList(tn`/threads/${e}/runs`,qt,{query:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}cancel(e,t,n){const{thread_id:s}=t;return this._client.post(tn`/threads/${s}/runs/${e}/cancel`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}async createAndPoll(e,t,n){const s=await this.create(e,t,n);return await this.poll(s.id,{thread_id:e},n)}createAndStream(e,t,n){return tr.createAssistantStream(e,this._client.beta.threads.runs,t,n)}async poll(e,t,n){const s=bs([n?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":n?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(e,t,{...n,headers:{...n?.headers,...s}}).withResponse();switch(r.status){case"queued":case"in_progress":case"cancelling":let e=5e3;if(n?.pollIntervalMs)e=n.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const n=parseInt(t);isNaN(n)||(e=n)}}await Be(e);break;case"requires_action":case"incomplete":case"cancelled":case"completed":case"failed":case"expired":return r}}}stream(e,t,n){return tr.createAssistantStream(e,this._client.beta.threads.runs,t,n)}submitToolOutputs(e,t,n){const{thread_id:s,...r}=t;return this._client.post(tn`/threads/${s}/runs/${e}/submit_tool_outputs`,{body:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers]),stream:t.stream??!1})}async submitToolOutputsAndPoll(e,t,n){const s=await this.submitToolOutputs(e,t,n);return await this.poll(s.id,t,n)}submitToolOutputsStream(e,t,n){return tr.createToolAssistantStream(e,this._client.beta.threads.runs,t,n)}};nr.Steps=Ps;class sr extends Qt{constructor(){super(...arguments),this.runs=new nr(this._client),this.messages=new Rs(this._client)}create(e={},t){return this._client.post("/threads",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(tn`/threads/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,n){return this._client.post(tn`/threads/${e}`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}delete(e,t){return this._client.delete(tn`/threads/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}createAndRun(e,t){return this._client.post("/threads/runs",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers]),stream:e.stream??!1})}async createAndRunPoll(e,t){const n=await this.createAndRun(e,t);return await this.runs.poll(n.id,{thread_id:n.thread_id},t)}createAndRunStream(e,t){return tr.createThreadAssistantStream(e,this._client.beta.threads,t)}}sr.Runs=nr,sr.Messages=Rs;class rr extends Qt{constructor(){super(...arguments),this.realtime=new Os(this._client),this.assistants=new $s(this._client),this.threads=new sr(this._client)}}rr.Realtime=Os,rr.Assistants=$s,rr.Threads=sr;class or extends Qt{create(e,t){return this._client.post("/completions",{body:e,...t,stream:e.stream??!1})}}class ir extends Qt{retrieve(e,t,n){const{container_id:s}=t;return this._client.get(tn`/containers/${s}/files/${e}/content`,{...n,headers:bs([{Accept:"application/binary"},n?.headers]),__binaryResponse:!0})}}let ar=class extends Qt{constructor(){super(...arguments),this.content=new ir(this._client)}create(e,t,n){return this._client.post(tn`/containers/${e}/files`,Xt({body:t,...n},this._client))}retrieve(e,t,n){const{container_id:s}=t;return this._client.get(tn`/containers/${s}/files/${e}`,n)}list(e,t={},n){return this._client.getAPIList(tn`/containers/${e}/files`,qt,{query:t,...n})}delete(e,t,n){const{container_id:s}=t;return this._client.delete(tn`/containers/${s}/files/${e}`,{...n,headers:bs([{Accept:"*/*"},n?.headers])})}};ar.Content=ir;class lr extends Qt{constructor(){super(...arguments),this.files=new ar(this._client)}create(e,t){return this._client.post("/containers",{body:e,...t})}retrieve(e,t){return this._client.get(tn`/containers/${e}`,t)}list(e={},t){return this._client.getAPIList("/containers",qt,{query:e,...t})}delete(e,t){return this._client.delete(tn`/containers/${e}`,{...t,headers:bs([{Accept:"*/*"},t?.headers])})}}lr.Files=ar;class cr extends Qt{create(e,t,n){const{include:s,...r}=t;return this._client.post(tn`/conversations/${e}/items`,{query:{include:s},body:r,...n})}retrieve(e,t,n){const{conversation_id:s,...r}=t;return this._client.get(tn`/conversations/${s}/items/${e}`,{query:r,...n})}list(e,t={},n){return this._client.getAPIList(tn`/conversations/${e}/items`,Wt,{query:t,...n})}delete(e,t,n){const{conversation_id:s}=t;return this._client.delete(tn`/conversations/${s}/items/${e}`,n)}}class ur extends Qt{constructor(){super(...arguments),this.items=new cr(this._client)}create(e={},t){return this._client.post("/conversations",{body:e,...t})}retrieve(e,t){return this._client.get(tn`/conversations/${e}`,t)}update(e,t,n){return this._client.post(tn`/conversations/${e}`,{body:t,...n})}delete(e,t){return this._client.delete(tn`/conversations/${e}`,t)}}ur.Items=cr;class dr extends Qt{create(e,t){const n=!!e.encoding_format;let s=n?e.encoding_format:"base64";n&&At(this._client).debug("embeddings/user defined encoding_format:",e.encoding_format);const r=this._client.post("/embeddings",{body:{...e,encoding_format:s},...t});return n?r:(At(this._client).debug("embeddings/decoding base64 embeddings from base64"),r._thenUnwrap((e=>(e&&e.data&&e.data.forEach((e=>{const t=e.embedding;e.embedding=(e=>{if("undefined"!=typeof Buffer){const t=Buffer.from(e,"base64");return Array.from(new Float32Array(t.buffer,t.byteOffset,t.length/Float32Array.BYTES_PER_ELEMENT))}{const t=atob(e),n=t.length,s=new Uint8Array(n);for(let e=0;en)throw new ke({message:`Giving up on waiting for file ${e} to finish processing after ${n} milliseconds.`});return o}};class mr extends Qt{}let gr=class extends Qt{run(e,t){return this._client.post("/fine_tuning/alpha/graders/run",{body:e,...t})}validate(e,t){return this._client.post("/fine_tuning/alpha/graders/validate",{body:e,...t})}};class yr extends Qt{constructor(){super(...arguments),this.graders=new gr(this._client)}}yr.Graders=gr;class br extends Qt{create(e,t,n){return this._client.getAPIList(tn`/fine_tuning/checkpoints/${e}/permissions`,Dt,{body:t,method:"post",...n})}retrieve(e,t={},n){return this._client.get(tn`/fine_tuning/checkpoints/${e}/permissions`,{query:t,...n})}delete(e,t,n){const{fine_tuned_model_checkpoint:s}=t;return this._client.delete(tn`/fine_tuning/checkpoints/${s}/permissions/${e}`,n)}}let wr=class extends Qt{constructor(){super(...arguments),this.permissions=new br(this._client)}};wr.Permissions=br;class vr extends Qt{list(e,t={},n){return this._client.getAPIList(tn`/fine_tuning/jobs/${e}/checkpoints`,qt,{query:t,...n})}}class xr extends Qt{constructor(){super(...arguments),this.checkpoints=new vr(this._client)}create(e,t){return this._client.post("/fine_tuning/jobs",{body:e,...t})}retrieve(e,t){return this._client.get(tn`/fine_tuning/jobs/${e}`,t)}list(e={},t){return this._client.getAPIList("/fine_tuning/jobs",qt,{query:e,...t})}cancel(e,t){return this._client.post(tn`/fine_tuning/jobs/${e}/cancel`,t)}listEvents(e,t={},n){return this._client.getAPIList(tn`/fine_tuning/jobs/${e}/events`,qt,{query:t,...n})}pause(e,t){return this._client.post(tn`/fine_tuning/jobs/${e}/pause`,t)}resume(e,t){return this._client.post(tn`/fine_tuning/jobs/${e}/resume`,t)}}xr.Checkpoints=vr;class Sr extends Qt{constructor(){super(...arguments),this.methods=new mr(this._client),this.jobs=new xr(this._client),this.checkpoints=new wr(this._client),this.alpha=new yr(this._client)}}Sr.Methods=mr,Sr.Jobs=xr,Sr.Checkpoints=wr,Sr.Alpha=yr;class kr extends Qt{}class $r extends Qt{constructor(){super(...arguments),this.graderModels=new kr(this._client)}}$r.GraderModels=kr;class Ar extends Qt{createVariation(e,t){return this._client.post("/images/variations",Xt({body:e,...t},this._client))}edit(e,t){return this._client.post("/images/edits",Xt({body:e,...t,stream:e.stream??!1},this._client))}generate(e,t){return this._client.post("/images/generations",{body:e,...t,stream:e.stream??!1})}}class Ir extends Qt{retrieve(e,t){return this._client.get(tn`/models/${e}`,t)}list(e){return this._client.getAPIList("/models",Dt,e)}delete(e,t){return this._client.delete(tn`/models/${e}`,t)}}class Or extends Qt{create(e,t){return this._client.post("/moderations",{body:e,...t})}}class Rr extends Qt{create(e,t){return this._client.post("/realtime/client_secrets",{body:e,...t})}}class Pr extends Qt{constructor(){super(...arguments),this.clientSecrets=new Rr(this._client)}}function Cr(e,t){return t&&function(e){if(rn(e.text?.format))return!0;return!1}(t)?Er(e,t):{...e,output_parsed:null,output:e.output.map((e=>"function_call"===e.type?{...e,parsed_arguments:null}:"message"===e.type?{...e,content:e.content.map((e=>({...e,parsed:null})))}:e))}}function Er(e,t){const n=e.output.map((e=>{if("function_call"===e.type)return{...e,parsed_arguments:jr(t,e)};if("message"===e.type){const n=e.content.map((e=>"output_text"===e.type?{...e,parsed:Tr(t,e.text)}:e));return{...e,content:n}}return e})),s=Object.assign({},e,{output:n});return Object.getOwnPropertyDescriptor(e,"output_text")||Mr(s),Object.defineProperty(s,"output_parsed",{enumerable:!0,get(){for(const e of s.output)if("message"===e.type)for(const t of e.content)if("output_text"===t.type&&null!==t.parsed)return t.parsed;return null}}),s}function Tr(e,t){if("json_schema"!==e.text?.format?.type)return null;if("$parseRaw"in e.text?.format){const n=e.text?.format;return n.$parseRaw(t)}return JSON.parse(t)}function jr(e,t){const n=(s=e.tools??[],r=t.name,s.find((e=>"function"===e.type&&e.name===r)));var s,r,o;return{...t,...t,parsed_arguments:(o=n,"auto-parseable-tool"===o?.$brand?n.$parseRaw(t.arguments):n?.strict?JSON.parse(t.arguments):null)}}function Mr(e){const t=[];for(const n of e.output)if("message"===n.type)for(const e of n.content)"output_text"===e.type&&t.push(e.text);e.output_text=t.join("")}var Nr,Lr,Dr,qr,Wr,Br,Ur,Fr;Pr.ClientSecrets=Rr;class Hr extends Mn{constructor(e){super(),Nr.add(this),Lr.set(this,void 0),Dr.set(this,void 0),qr.set(this,void 0),_e(this,Lr,e)}static createResponse(e,t,n){const s=new Hr(t);return s._run((()=>s._createOrRetrieveResponse(e,t,{...n,headers:{...n?.headers,"X-Stainless-Helper-Method":"stream"}}))),s}async _createOrRetrieveResponse(e,t,n){const s=n?.signal;let r;s&&(s.aborted&&this.controller.abort(),s.addEventListener("abort",(()=>this.controller.abort()))),me(this,Nr,"m",Wr).call(this);let o=null;"response_id"in t?(r=await e.responses.retrieve(t.response_id,{stream:!0},{...n,signal:this.controller.signal,stream:!0}),o=t.starting_after??null):r=await e.responses.create({...t,stream:!0},{...n,signal:this.controller.signal}),this._connected();for await(const e of r)me(this,Nr,"m",Br).call(this,e,o);if(r.controller.signal?.aborted)throw new xe;return me(this,Nr,"m",Ur).call(this)}[(Lr=new WeakMap,Dr=new WeakMap,qr=new WeakMap,Nr=new WeakSet,Wr=function(){this.ended||_e(this,Dr,void 0)},Br=function(e,t){if(this.ended)return;const n=(e,n)=>{(null==t||n.sequence_number>t)&&this._emit(e,n)},s=me(this,Nr,"m",Fr).call(this,e);switch(n("event",e),e.type){case"response.output_text.delta":{const t=s.output[e.output_index];if(!t)throw new we(`missing output at index ${e.output_index}`);if("message"===t.type){const s=t.content[e.content_index];if(!s)throw new we(`missing content at index ${e.content_index}`);if("output_text"!==s.type)throw new we(`expected content to be 'output_text', got ${s.type}`);n("response.output_text.delta",{...e,snapshot:s.text})}break}case"response.function_call_arguments.delta":{const t=s.output[e.output_index];if(!t)throw new we(`missing output at index ${e.output_index}`);"function_call"===t.type&&n("response.function_call_arguments.delta",{...e,snapshot:t.arguments});break}default:n(e.type,e)}},Ur=function(){if(this.ended)throw new we("stream has ended, this shouldn't happen");const e=me(this,Dr,"f");if(!e)throw new we("request ended without sending any events");_e(this,Dr,void 0);const t=function(e,t){return Cr(e,t)}(e,me(this,Lr,"f"));return _e(this,qr,t),t},Fr=function(e){let t=me(this,Dr,"f");if(!t){if("response.created"!==e.type)throw new we(`When snapshot hasn't been set yet, expected 'response.created' event, got ${e.type}`);return t=_e(this,Dr,e.response),t}switch(e.type){case"response.output_item.added":t.output.push(e.item);break;case"response.content_part.added":{const n=t.output[e.output_index];if(!n)throw new we(`missing output at index ${e.output_index}`);const s=n.type,r=e.part;"message"===s&&"reasoning_text"!==r.type?n.content.push(r):"reasoning"===s&&"reasoning_text"===r.type&&(n.content||(n.content=[]),n.content.push(r));break}case"response.output_text.delta":{const n=t.output[e.output_index];if(!n)throw new we(`missing output at index ${e.output_index}`);if("message"===n.type){const t=n.content[e.content_index];if(!t)throw new we(`missing content at index ${e.content_index}`);if("output_text"!==t.type)throw new we(`expected content to be 'output_text', got ${t.type}`);t.text+=e.delta}break}case"response.function_call_arguments.delta":{const n=t.output[e.output_index];if(!n)throw new we(`missing output at index ${e.output_index}`);"function_call"===n.type&&(n.arguments+=e.delta);break}case"response.reasoning_text.delta":{const n=t.output[e.output_index];if(!n)throw new we(`missing output at index ${e.output_index}`);if("reasoning"===n.type){const t=n.content?.[e.content_index];if(!t)throw new we(`missing content at index ${e.content_index}`);if("reasoning_text"!==t.type)throw new we(`expected content to be 'reasoning_text', got ${t.type}`);t.text+=e.delta}break}case"response.completed":_e(this,Dr,e.response)}return t},Symbol.asyncIterator)](){const e=[],t=[];let n=!1;return this.on("event",(n=>{const s=t.shift();s?s.resolve(n):e.push(n)})),this.on("end",(()=>{n=!0;for(const e of t)e.resolve(void 0);t.length=0})),this.on("abort",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),this.on("error",(e=>{n=!0;for(const n of t)n.reject(e);t.length=0})),{next:async()=>{if(!e.length)return n?{value:void 0,done:!0}:new Promise(((e,n)=>t.push({resolve:e,reject:n}))).then((e=>e?{value:e,done:!1}:{value:void 0,done:!0}));return{value:e.shift(),done:!1}},return:async()=>(this.abort(),{value:void 0,done:!0})}}async finalResponse(){await this.done();const e=me(this,qr,"f");if(!e)throw new we("stream ended without producing a ChatCompletion");return e}}class Xr extends Qt{list(e,t={},n){return this._client.getAPIList(tn`/responses/${e}/input_items`,qt,{query:t,...n})}}class Kr extends Qt{constructor(){super(...arguments),this.inputItems=new Xr(this._client)}create(e,t){return this._client.post("/responses",{body:e,...t,stream:e.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Mr(e),e)))}retrieve(e,t={},n){return this._client.get(tn`/responses/${e}`,{query:t,...n,stream:t?.stream??!1})._thenUnwrap((e=>("object"in e&&"response"===e.object&&Mr(e),e)))}delete(e,t){return this._client.delete(tn`/responses/${e}`,{...t,headers:bs([{Accept:"*/*"},t?.headers])})}parse(e,t){return this._client.responses.create(e,t)._thenUnwrap((t=>Er(t,e)))}stream(e,t){return Hr.createResponse(this._client,e,t)}cancel(e,t){return this._client.post(tn`/responses/${e}/cancel`,t)}}Kr.InputItems=Xr;class Jr extends Qt{create(e,t,n){return this._client.post(tn`/uploads/${e}/parts`,Xt({body:t,...n},this._client))}}class Vr extends Qt{constructor(){super(...arguments),this.parts=new Jr(this._client)}create(e,t){return this._client.post("/uploads",{body:e,...t})}cancel(e,t){return this._client.post(tn`/uploads/${e}/cancel`,t)}complete(e,t,n){return this._client.post(tn`/uploads/${e}/complete`,{body:t,...n})}}Vr.Parts=Jr;class zr extends Qt{create(e,t,n){return this._client.post(tn`/vector_stores/${e}/file_batches`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}retrieve(e,t,n){const{vector_store_id:s}=t;return this._client.get(tn`/vector_stores/${s}/file_batches/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}cancel(e,t,n){const{vector_store_id:s}=t;return this._client.post(tn`/vector_stores/${s}/file_batches/${e}/cancel`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}async createAndPoll(e,t,n){const s=await this.create(e,t);return await this.poll(e,s.id,n)}listFiles(e,t,n){const{vector_store_id:s,...r}=t;return this._client.getAPIList(tn`/vector_stores/${s}/file_batches/${e}/files`,qt,{query:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}async poll(e,t,n){const s=bs([n?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":n?.pollIntervalMs?.toString()??void 0}]);for(;;){const{data:r,response:o}=await this.retrieve(t,{vector_store_id:e},{...n,headers:s}).withResponse();switch(r.status){case"in_progress":let e=5e3;if(n?.pollIntervalMs)e=n.pollIntervalMs;else{const t=o.headers.get("openai-poll-after-ms");if(t){const n=parseInt(t);isNaN(n)||(e=n)}}await Be(e);break;case"failed":case"cancelled":case"completed":return r}}}async uploadAndPoll(e,{files:t,fileIds:n=[]},s){if(null==t||0==t.length)throw new Error("No `files` provided to process. If you've already uploaded files you should use `.createAndPoll()` instead");const r=s?.maxConcurrency??5,o=Math.min(r,t.length),i=this._client,a=t.values(),l=[...n];const c=Array(o).fill(a).map((async function(e){for(let t of e){const e=await i.files.create({file:t,purpose:"assistants"},s);l.push(e.id)}}));return await(async e=>{const t=await Promise.allSettled(e),n=t.filter((e=>"rejected"===e.status));if(n.length){for(const e of n)console.error(e.reason);throw new Error(`${n.length} promise(s) failed - see the above errors`)}const s=[];for(const e of t)"fulfilled"===e.status&&s.push(e.value);return s})(c),await this.createAndPoll(e,{file_ids:l})}}class Gr extends Qt{create(e,t,n){return this._client.post(tn`/vector_stores/${e}/files`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}retrieve(e,t,n){const{vector_store_id:s}=t;return this._client.get(tn`/vector_stores/${s}/files/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}update(e,t,n){const{vector_store_id:s,...r}=t;return this._client.post(tn`/vector_stores/${s}/files/${e}`,{body:r,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e,t={},n){return this._client.getAPIList(tn`/vector_stores/${e}/files`,qt,{query:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}delete(e,t,n){const{vector_store_id:s}=t;return this._client.delete(tn`/vector_stores/${s}/files/${e}`,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}async createAndPoll(e,t,n){const s=await this.create(e,t,n);return await this.poll(e,s.id,n)}async poll(e,t,n){const s=bs([n?.headers,{"X-Stainless-Poll-Helper":"true","X-Stainless-Custom-Poll-Interval":n?.pollIntervalMs?.toString()??void 0}]);for(;;){const r=await this.retrieve(t,{vector_store_id:e},{...n,headers:s}).withResponse(),o=r.data;switch(o.status){case"in_progress":let e=5e3;if(n?.pollIntervalMs)e=n.pollIntervalMs;else{const t=r.response.headers.get("openai-poll-after-ms");if(t){const n=parseInt(t);isNaN(n)||(e=n)}}await Be(e);break;case"failed":case"completed":return o}}}async upload(e,t,n){const s=await this._client.files.create({file:t,purpose:"assistants"},n);return this.create(e,{file_id:s.id},n)}async uploadAndPoll(e,t,n){const s=await this.upload(e,t,n);return await this.poll(e,s.id,n)}content(e,t,n){const{vector_store_id:s}=t;return this._client.getAPIList(tn`/vector_stores/${s}/files/${e}/content`,Dt,{...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}}class Qr extends Qt{constructor(){super(...arguments),this.files=new Gr(this._client),this.fileBatches=new zr(this._client)}create(e,t){return this._client.post("/vector_stores",{body:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}retrieve(e,t){return this._client.get(tn`/vector_stores/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}update(e,t,n){return this._client.post(tn`/vector_stores/${e}`,{body:t,...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}list(e={},t){return this._client.getAPIList("/vector_stores",qt,{query:e,...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}delete(e,t){return this._client.delete(tn`/vector_stores/${e}`,{...t,headers:bs([{"OpenAI-Beta":"assistants=v2"},t?.headers])})}search(e,t,n){return this._client.getAPIList(tn`/vector_stores/${e}/search`,Dt,{body:t,method:"post",...n,headers:bs([{"OpenAI-Beta":"assistants=v2"},n?.headers])})}}var Yr,Zr,eo,to,no,so,ro;Qr.Files=Gr,Qr.FileBatches=zr;class oo extends Qt{constructor(){super(...arguments),Yr.add(this)}async unwrap(e,t,n=this._client.webhookSecret,s=300){return await this.verifySignature(e,t,n,s),JSON.parse(e)}async verifySignature(e,t,n=this._client.webhookSecret,s=300){if("undefined"==typeof crypto||"function"!=typeof crypto.subtle.importKey||"function"!=typeof crypto.subtle.verify)throw new Error("Webhook signature verification is only supported when the `crypto` global is defined");me(this,Yr,"m",Zr).call(this,n);const r=bs([t]).values,o=me(this,Yr,"m",eo).call(this,r,"webhook-signature"),i=me(this,Yr,"m",eo).call(this,r,"webhook-timestamp"),a=me(this,Yr,"m",eo).call(this,r,"webhook-id"),l=parseInt(i,10);if(isNaN(l))throw new Me("Invalid webhook timestamp format");const c=Math.floor(Date.now()/1e3);if(c-l>s)throw new Me("Webhook timestamp is too old");if(l>c+s)throw new Me("Webhook timestamp is too new");const u=o.split(" ").map((e=>e.startsWith("v1,")?e.substring(3):e)),d=n.startsWith("whsec_")?Buffer.from(n.replace("whsec_",""),"base64"):Buffer.from(n,"utf-8"),h=a?`${a}.${i}.${e}`:`${i}.${e}`,p=await crypto.subtle.importKey("raw",d,{name:"HMAC",hash:"SHA-256"},!1,["verify"]);for(const e of u)try{const t=Buffer.from(e,"base64");if(await crypto.subtle.verify("HMAC",p,t,(new TextEncoder).encode(h)))return}catch{continue}throw new Me("The given webhook signature does not match the expected signature")}}Yr=new WeakSet,Zr=function(e){if("string"!=typeof e||0===e.length)throw new Error("The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function")},eo=function(e,t){if(!e)throw new Error("Headers are required");const n=e.get(t);if(null==n)throw new Error(`Missing required header: ${t}`);return n};class io{constructor({baseURL:e=Cs("OPENAI_BASE_URL"),apiKey:t=Cs("OPENAI_API_KEY"),organization:n=Cs("OPENAI_ORG_ID")??null,project:s=Cs("OPENAI_PROJECT_ID")??null,webhookSecret:r=Cs("OPENAI_WEBHOOK_SECRET")??null,...o}={}){if(to.add(this),so.set(this,void 0),this.completions=new or(this),this.chat=new ms(this),this.embeddings=new dr(this),this.files=new _r(this),this.images=new Ar(this),this.audio=new Ss(this),this.moderations=new Or(this),this.models=new Ir(this),this.fineTuning=new Sr(this),this.graders=new $r(this),this.vectorStores=new Qr(this),this.webhooks=new oo(this),this.beta=new rr(this),this.batches=new ks(this),this.uploads=new Vr(this),this.responses=new Kr(this),this.realtime=new Pr(this),this.conversations=new ur(this),this.evals=new fr(this),this.containers=new lr(this),void 0===t)throw new we("Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.");const i={apiKey:t,organization:n,project:s,webhookSecret:r,...o,baseURL:e||"https://api.openai.com/v1"};if(!i.dangerouslyAllowBrowser&&"undefined"!=typeof window&&void 0!==window.document&&"undefined"!=typeof navigator)throw new we("It looks like you're running in a browser-like environment.\n\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\nIf you understand the risks and have appropriate mitigations in place,\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\n\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\n\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\n");this.baseURL=i.baseURL,this.timeout=i.timeout??no.DEFAULT_TIMEOUT,this.logger=i.logger??console;const a="warn";this.logLevel=a,this.logLevel=vt(i.logLevel,"ClientOptions.logLevel",this)??vt(Cs("OPENAI_LOG"),"process.env['OPENAI_LOG']",this)??a,this.fetchOptions=i.fetchOptions,this.maxRetries=i.maxRetries??2,this.fetch=i.fetch??function(){if("undefined"!=typeof fetch)return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}(),_e(this,so,Ge),this._options=i,this.apiKey="string"==typeof t?t:"Missing Key",this.organization=n,this.project=s,this.webhookSecret=r}withOptions(e){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,organization:this.organization,project:this.project,webhookSecret:this.webhookSecret,...e})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:e,nulls:t}){}async authHeaders(e){return bs([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(e){return ut(e,{arrayFormat:"brackets"})}getUserAgent(){return`${this.constructor.name}/JS ${Ue}`}defaultIdempotencyKey(){return`stainless-node-retry-${ge()}`}makeStatusError(e,t,n,s){return ve.generate(e,t,n,s)}async _callApiKey(){const e=this._options.apiKey;if("function"!=typeof e)return!1;let t;try{t=await e()}catch(e){if(e instanceof we)throw e;throw new we(`Failed to get token from 'apiKey' function: ${e.message}`,{cause:e})}if("string"!=typeof t||!t)throw new we(`Expected 'apiKey' function argument to return a string but it returned ${t}`);return this.apiKey=t,!0}buildURL(e,t,n){const s=!me(this,to,"m",ro).call(this)&&n||this.baseURL,r=(e=>Ne.test(e))(e)?new URL(e):new URL(s+(s.endsWith("/")&&e.startsWith("/")?e.slice(1):e)),o=this.defaultQuery();return function(e){if(!e)return!0;for(const t in e)return!1;return!0}(o)||(t={...o,...t}),"object"==typeof t&&t&&!Array.isArray(t)&&(r.search=this.stringifyQuery(t)),r.toString()}async prepareOptions(e){await this._callApiKey()}async prepareRequest(e,{url:t,options:n}){}get(e,t){return this.methodRequest("get",e,t)}post(e,t){return this.methodRequest("post",e,t)}patch(e,t){return this.methodRequest("patch",e,t)}put(e,t){return this.methodRequest("put",e,t)}delete(e,t){return this.methodRequest("delete",e,t)}methodRequest(e,t,n){return this.request(Promise.resolve(n).then((n=>({method:e,path:t,...n}))))}request(e,t=null){return new Mt(this,this.makeRequest(e,t,void 0))}async makeRequest(e,t,n){const s=await e,r=s.maxRetries??this.maxRetries;null==t&&(t=r),await this.prepareOptions(s);const{req:o,url:i,timeout:a}=await this.buildRequest(s,{retryCount:r-t});await this.prepareRequest(o,{url:i,options:s});const l="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),c=void 0===n?"":`, retryOf: ${n}`,u=Date.now();if(At(this).debug(`[${l}] sending request`,It({retryOfRequestLogID:n,method:s.method,url:i,options:s,headers:o.headers})),s.signal?.aborted)throw new xe;const d=new AbortController,h=await this.fetchWithTimeout(i,o,a,d).catch(be),p=Date.now();if(h instanceof globalThis.Error){const e=`retrying, ${t} attempts remaining`;if(s.signal?.aborted)throw new xe;const r=ye(h)||/timed? ?out/i.test(String(h)+("cause"in h?String(h.cause):""));if(t)return At(this).info(`[${l}] connection ${r?"timed out":"failed"} - ${e}`),At(this).debug(`[${l}] connection ${r?"timed out":"failed"} (${e})`,It({retryOfRequestLogID:n,url:i,durationMs:p-u,message:h.message})),this.retryRequest(s,t,n??l);if(At(this).info(`[${l}] connection ${r?"timed out":"failed"} - error; no more retries left`),At(this).debug(`[${l}] connection ${r?"timed out":"failed"} (error; no more retries left)`,It({retryOfRequestLogID:n,url:i,durationMs:p-u,message:h.message})),r)throw new ke;throw new Se({cause:h})}const f=`[${l}${c}${[...h.headers.entries()].filter((([e])=>"x-request-id"===e)).map((([e,t])=>", "+e+": "+JSON.stringify(t))).join("")}] ${o.method} ${i} ${h.ok?"succeeded":"failed"} with status ${h.status} in ${p-u}ms`;if(!h.ok){const e=await this.shouldRetry(h);if(t&&e){const e=`retrying, ${t} attempts remaining`;return await async function(e){if(null===e||"object"!=typeof e)return;if(e[Symbol.asyncIterator])return void await(e[Symbol.asyncIterator]().return?.());const t=e.getReader(),n=t.cancel();t.releaseLock(),await n}(h.body),At(this).info(`${f} - ${e}`),At(this).debug(`[${l}] response error (${e})`,It({retryOfRequestLogID:n,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),this.retryRequest(s,t,n??l,h.headers)}const r=e?"error; no more retries left":"error; not retryable";At(this).info(`${f} - ${r}`);const o=await h.text().catch((e=>be(e).message)),i=(e=>{try{return JSON.parse(e)}catch(e){return}})(o),a=i?void 0:o;At(this).debug(`[${l}] response error (${r})`,It({retryOfRequestLogID:n,url:h.url,status:h.status,headers:h.headers,message:a,durationMs:Date.now()-u}));throw this.makeStatusError(h.status,i,a,h.headers)}return At(this).info(f),At(this).debug(`[${l}] response start`,It({retryOfRequestLogID:n,url:h.url,status:h.status,headers:h.headers,durationMs:p-u})),{response:h,options:s,controller:d,requestLogID:l,retryOfRequestLogID:n,startTime:u}}getAPIList(e,t,n){return this.requestAPIList(t,{method:"get",path:e,...n})}requestAPIList(e,t){const n=this.makeRequest(t,null,void 0);return new Lt(this,n,e)}async fetchWithTimeout(e,t,n,s){const{signal:r,method:o,...i}=t||{};r&&r.addEventListener("abort",(()=>s.abort()));const a=setTimeout((()=>s.abort()),n),l=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||"object"==typeof i.body&&null!==i.body&&Symbol.asyncIterator in i.body,c={signal:s.signal,...l?{duplex:"half"}:{},method:"GET",...i};o&&(c.method=o.toUpperCase());try{return await this.fetch.call(void 0,e,c)}finally{clearTimeout(a)}}async shouldRetry(e){const t=e.headers.get("x-should-retry");return"true"===t||"false"!==t&&(408===e.status||(409===e.status||(429===e.status||e.status>=500)))}async retryRequest(e,t,n,s){let r;const o=s?.get("retry-after-ms");if(o){const e=parseFloat(o);Number.isNaN(e)||(r=e)}const i=s?.get("retry-after");if(i&&!r){const e=parseFloat(i);r=Number.isNaN(e)?Date.parse(i)-Date.now():1e3*e}if(!(r&&0<=r&&r<6e4)){const n=e.maxRetries??this.maxRetries;r=this.calculateDefaultRetryTimeoutMillis(t,n)}return await Be(r),this.makeRequest(e,t-1,n)}calculateDefaultRetryTimeoutMillis(e,t){const n=t-e;return Math.min(.5*Math.pow(2,n),8)*(1-.25*Math.random())*1e3}async buildRequest(e,{retryCount:t=0}={}){const n={...e},{method:s,path:r,query:o,defaultBaseURL:i}=n,a=this.buildURL(r,o,i);"timeout"in n&&((e,t)=>{if("number"!=typeof t||!Number.isInteger(t))throw new we(`${e} must be an integer`);if(t<0)throw new we(`${e} must be a positive integer`)})("timeout",n.timeout),n.timeout=n.timeout??this.timeout;const{bodyHeaders:l,body:c}=this.buildBody({options:n});return{req:{method:s,headers:await this.buildHeaders({options:e,method:s,bodyHeaders:l,retryCount:t}),...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&c instanceof globalThis.ReadableStream&&{duplex:"half"},...c&&{body:c},...this.fetchOptions??{},...n.fetchOptions??{}},url:a,timeout:n.timeout}}async buildHeaders({options:e,method:t,bodyHeaders:n,retryCount:s}){let r={};this.idempotencyHeader&&"get"!==t&&(e.idempotencyKey||(e.idempotencyKey=this.defaultIdempotencyKey()),r[this.idempotencyHeader]=e.idempotencyKey);const o=bs([r,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(s),...e.timeout?{"X-Stainless-Timeout":String(Math.trunc(e.timeout/1e3))}:{},...Ke??(Ke=Fe()),"OpenAI-Organization":this.organization,"OpenAI-Project":this.project},await this.authHeaders(e),this._options.defaultHeaders,n,e.headers]);return this.validateHeaders(o),o.values}buildBody({options:{body:e,headers:t}}){if(!e)return{bodyHeaders:void 0,body:void 0};const n=bs([t]);return ArrayBuffer.isView(e)||e instanceof ArrayBuffer||e instanceof DataView||"string"==typeof e&&n.values.has("content-type")||globalThis.Blob&&e instanceof globalThis.Blob||e instanceof FormData||e instanceof URLSearchParams||globalThis.ReadableStream&&e instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:e}:"object"==typeof e&&(Symbol.asyncIterator in e||Symbol.iterator in e&&"next"in e&&"function"==typeof e.next)?{bodyHeaders:void 0,body:Ve(e)}:me(this,so,"f").call(this,{body:e,headers:n})}}function ao(e,t,n){const[s,r]=ie([]),[o,i]=ie(null);return{models:s,fetchModels:()=>X(this,void 0,void 0,(function*(){if(e)try{const s=new io({apiKey:e,baseURL:t||void 0,project:n||void 0,dangerouslyAllowBrowser:!0}),o=(yield s.models.list()).data.filter((e=>e.id.startsWith("gpt")||-1!==e.id.search(/^o\d+/gi)||e.id.startsWith("chatgpt")));o.sort(((e,t)=>t.id.localeCompare(e.id))),r(o.map((e=>e.id))),i(null)}catch(e){console.error(e),i(e.message||String(e))}})),validateModel:(s,r)=>X(this,void 0,void 0,(function*(){var o,i;if(!e||!s)return{success:!1,error:"API Key and Model are required"};try{const a=new io({apiKey:e,baseURL:t||void 0,project:n||void 0,dangerouslyAllowBrowser:!0}),l=null===(i=null===(o=(yield a.chat.completions.create({model:s,messages:[{role:"user",content:"reply just pong, set success to true, and provide a random number between 1 and 100."}],max_completion_tokens:r||2e3,response_format:{type:"json_schema",json_schema:{name:"model_test",strict:!0,schema:{type:"object",properties:{reply:{type:"string",description:"The text reply"},success:{type:"boolean",description:"Always true"},data:{type:"object",properties:{number:{type:"integer"}},required:["number"],additionalProperties:!1}},required:["reply","success","data"],additionalProperties:!1}}}})).choices[0])||void 0===o?void 0:o.message)||void 0===i?void 0:i.content;if(!l)throw new Error("No content returned from the model.");const c=JSON.parse(l);if("string"!=typeof c.reply||"boolean"!=typeof c.success||"object"!=typeof c.data||"number"!=typeof c.data.number)throw new Error("Model did not follow the JSON schema correctly.");return{success:!0,message:"The model is valid and supports structured outputs!"}}catch(e){return{success:!1,error:e.message||String(e)}}})),error:o,isCurrentVersionSupportingImages:e=>{if(!e)return!1;const t=e.match(/gpt-(\d+)/);return!!(null==t?void 0:t[1])&&Number(t[1])>=4}}}function lo({config:e,onChange:t,showMessage:n,visible:s}){if(!s)return null;const{models:r,fetchModels:o,validateModel:i}=ao(e.apiKey,e.baseURL,e.projectId),[a,l]=ie(!1);return H("div",{class:"bg-panel-bg backdrop-blur-md border border-panel-border rounded-2xl p-4 shadow-[0_8px_32px_0_rgba(0,0,0,0.3)]",id:"settings",children:[H("div",{class:"flex flex-col gap-2 mb-4",children:[H("label",{htmlFor:"apiKey",class:"text-sm font-medium text-text-secondary",children:["Api Key",H("span",{class:"text-error ml-1",children:"*"})]}),H("input",{id:"apiKey",type:"text",placeholder:"sk-...",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.apiKey||"",onInput:e=>t("apiKey",e.target.value)})]}),H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"model",class:"text-sm font-medium text-text-secondary",children:["GPT Model",H("span",{class:"text-error ml-1",children:"*"})]}),H("div",{class:"relative flex items-center",children:[H("input",{type:"text",id:"model",list:"models",placeholder:"gpt-4o",class:"w-full pl-3 pr-9 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.model||"",onInput:e=>t("model",e.target.value),onFocus:o}),H("datalist",{id:"models",children:r.map((e=>H("option",{value:e,children:e},e)))}),H("i",{class:`fa-solid ${a?"fa-spinner fa-spin":"fa-play"} absolute right-3 text-primary text-sm transition-all hover:scale-110 hover:text-primary-hover cursor-pointer`,onClick:()=>X(this,void 0,void 0,(function*(){if(!e.model)return void n("Please select a model first",!0);l(!0),n("Checking GPT version...",!1);const t=yield i(e.model,e.maxTokens);l(!1),t.success?n(t.message||"Valid model"):n(t.error||"Invalid model",!0)})),title:"Test"})]})]})]})}function co({config:e,onChange:t,visible:n}){return n?H("div",{class:"bg-panel-bg backdrop-blur-md border border-panel-border rounded-2xl p-4 shadow-[0_8px_32px_0_rgba(0,0,0,0.3)] flex flex-col gap-4",id:"advanced-settings",children:[H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"code",class:"text-sm font-medium text-text-secondary",children:"Activation Code"}),H("input",{id:"code",type:"text",placeholder:"Secret key...",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.code||"",onInput:e=>t("code",e.target.value)})]}),H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"baseURL",class:"text-sm font-medium text-text-secondary",children:"Base URL"}),H("input",{id:"baseURL",type:"text",placeholder:"https://api.openai.com/v1",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.baseURL||"",onInput:e=>t("baseURL",e.target.value)})]}),H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"projectId",class:"text-sm font-medium text-text-secondary",children:"Project ID"}),H("input",{id:"projectId",type:"text",placeholder:"proj_...",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.projectId||"",onInput:e=>t("projectId",e.target.value)})]}),H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"maxTokens",class:"text-sm font-medium text-text-secondary",children:"Max Tokens"}),H("input",{id:"maxTokens",type:"number",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.maxTokens||"",onInput:e=>{const n=e.target.value;t("maxTokens",n?parseInt(n):void 0)}})]}),H("div",{class:"flex flex-col gap-2",children:[H("label",{htmlFor:"timeoutValue",class:"text-sm font-medium text-text-secondary",children:"Timeout (s)"}),H("input",{id:"timeoutValue",type:"number",placeholder:"20",class:"w-full px-3 py-2.5 bg-input-bg border border-input-border rounded-lg text-text-primary text-sm transition-all focus:outline-none focus:border-input-focus focus:ring-2 focus:ring-primary/20 box-border",value:e.timeoutValue||"",onInput:e=>{const n=e.target.value;t("timeoutValue",n?parseInt(n):void 0)}})]})]}):null}function uo({config:e,onChange:t}){const{isCurrentVersionSupportingImages:n}=ao(),s=(n,s,r=!0)=>r?H("div",{class:"flex justify-between items-center",children:[H("label",{htmlFor:n,class:"text-sm text-text-primary",children:s}),H("label",{class:"toggle-switch",children:[H("input",{id:n,type:"checkbox",checked:!!e[n],onChange:e=>t(n,e.target.checked)}),H("span",{class:"slider"})]})]}):null,r="clipboard"===e.mode;return H("div",{class:"bg-panel-bg backdrop-blur-md border border-panel-border rounded-2xl p-4 shadow-[0_8px_32px_0_rgba(0,0,0,0.3)] grid grid-cols-2 gap-4",children:[s("logs","Console logs"),s("title","Title hint"),s("cursor","Cursor hint"),s("timeout","Timeout"),s("typing","Typing effect",!r),s("mouseover","Hover effect",!r),s("infinite","Infinite try"),s("history","History"),s("includeImages","Images (GPT-4)",n(e.model))]})}function ho({mode:e,onChange:t}){return H(v,{children:[H("div",{class:"flex items-center gap-2 text-sm font-semibold text-text-primary my-2",children:[H("i",{class:"fa-solid fa-bolt text-primary"}),H("span",{children:"Operating Mode"})]}),H("ul",{id:"mode",class:"list-none p-0 m-0 flex bg-input-bg rounded-xl border border-input-border overflow-hidden",children:[H("li",{class:"flex-1",children:H("button",{value:"autocomplete",class:"w-full p-2.5 border-none font-sans text-sm font-semibold cursor-pointer transition-colors duration-300 "+("autocomplete"===e?"bg-primary text-text-primary shadow-[0_2px_8px_rgba(99,102,241,0.4)]":"bg-transparent text-text-secondary hover:bg-white/5 hover:text-text-primary"),onClick:()=>t("autocomplete"),children:"autocomplete"})}),H("li",{class:"flex-1",children:H("button",{value:"clipboard",class:"w-full p-2.5 border-none font-sans text-sm font-semibold cursor-pointer transition-colors duration-300 "+("clipboard"===e?"bg-primary text-text-primary shadow-[0_2px_8px_rgba(99,102,241,0.4)]":"bg-transparent text-text-secondary hover:bg-white/5 hover:text-text-primary"),onClick:()=>t("clipboard"),children:"clipboard"})})]})]})}no=io,so=new WeakMap,to=new WeakSet,ro=function(){return"https://api.openai.com/v1"!==this.baseURL},io.OpenAI=no,io.DEFAULT_TIMEOUT=6e5,io.OpenAIError=we,io.APIError=ve,io.APIConnectionError=Se,io.APIConnectionTimeoutError=ke,io.APIUserAbortError=xe,io.NotFoundError=Oe,io.ConflictError=Re,io.RateLimitError=Ce,io.BadRequestError=$e,io.AuthenticationError=Ae,io.InternalServerError=Ee,io.PermissionDeniedError=Ie,io.UnprocessableEntityError=Pe,io.InvalidWebhookSignatureError=Me,io.toFile=async function(e,t,n){if(Bt(),(e=>null!=e&&"object"==typeof e&&"string"==typeof e.name&&"number"==typeof e.lastModified&&zt(e))(e=await e))return e instanceof File?e:Ut([await e.arrayBuffer()],e.name);if((e=>null!=e&&"object"==typeof e&&"string"==typeof e.url&&"function"==typeof e.blob)(e)){const s=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),Ut(await Gt(s),t,n)}const s=await Gt(e);if(t||(t=Ft(e)),!n?.type){const e=s.find((e=>"object"==typeof e&&"type"in e&&e.type));"string"==typeof e&&(n={...n,type:e})}return Ut(s,t,n)},io.Completions=or,io.Chat=ms,io.Embeddings=dr,io.Files=_r,io.Images=Ar,io.Audio=Ss,io.Moderations=Or,io.Models=Ir,io.FineTuning=Sr,io.Graders=$r,io.VectorStores=Qr,io.Webhooks=oo,io.Beta=rr,io.Batches=ks,io.Uploads=Vr,io.Responses=Kr,io.Realtime=Pr,io.Conversations=ur,io.Evals=fr,io.Containers=lr;const po=document.getElementById("root");po&&function(n,s){var r,o,i;s==document&&(s=document.documentElement),t.__&&t.__(n,s),r=s.__k,o=[],i=[],M(s,n=s.__k=function(t,n,s){var r,o,i,a={};for(i in n)"key"==i?r=n[i]:"ref"==i?o=n[i]:a[i]=n[i];if(arguments.length>2&&(a.children=arguments.length>3?e.call(arguments,2):s),"function"==typeof t&&null!=t.defaultProps)for(i in t.defaultProps)void 0===a[i]&&(a[i]=t.defaultProps[i]);return w(t,a,r,o,null)}(v,null,[n]),r||f,f,s.namespaceURI,r?null:s.firstChild?e.call(s.childNodes):null,o,r?r.__e:s.firstChild,!1,i),L(o,n,i)}(H((function(){const{config:e,loading:t,saveConfig:n,setConfig:s}=function(){const[e,t]=ie({mode:"autocomplete",title:!0,cursor:!0,timeout:!0}),[n,s]=ie(!0);return ae((()=>{chrome.storage.sync.get(["moodleGPT"]).then((e=>{e.moodleGPT&&t((t=>Object.assign(Object.assign({},t),e.moodleGPT))),s(!1)}))}),[]),{config:e,loading:n,saveConfig:n=>X(this,void 0,void 0,(function*(){const s=Object.assign(Object.assign({},e),n);t(s),yield chrome.storage.sync.set({moodleGPT:s})})),setConfig:t}}(),[r,o]=ie(!1),[i,a]=ie(null);if(t)return null;const l=(e,t)=>{s((n=>Object.assign(Object.assign({},n),{[e]:t})))},c=(e,t=!1)=>{a({text:e,isError:t}),setTimeout((()=>a(null)),5e3)};return H("main",{class:"p-6 flex flex-col gap-5 bg-gradient-to-br from-gradient-start to-gradient-end text-text-primary min-h-screen font-sans antialiased overflow-x-hidden",children:[H(fe,{}),H(lo,{config:e,onChange:l,showMessage:c,visible:!r}),H(co,{config:e,onChange:l,visible:r}),H("a",{href:"#",class:"block text-center text-sm text-text-secondary no-underline transition-colors hover:text-text-primary",onClick:e=>{e.preventDefault(),o(!r)},children:r?"Go back to settings":"Show Advanced Settings"}),H(ho,{mode:e.mode||"autocomplete",onChange:e=>l("mode",e)}),H("div",{class:"flex items-center gap-2 text-sm font-semibold text-text-primary my-2",children:[H("i",{class:"fa-solid fa-sliders text-primary"}),H("span",{children:"Options"})]}),H(uo,{config:e,onChange:l}),i&&H("p",{class:"text-center text-sm font-medium m-0 min-h-[18px] "+(i.isError?"text-error":"text-success"),children:i.text}),H("button",{class:"w-full p-3 bg-gradient-to-br from-primary to-primary-hover text-white border-none rounded-xl text-base font-semibold cursor-pointer transition-all hover:-translate-y-0.5 hover:shadow-[0_4px_12px_rgba(99,102,241,0.4)] active:translate-y-0 mt-2",onClick:()=>X(this,void 0,void 0,(function*(){e.apiKey&&e.model?e.code&&e.code.length>0&&e.code.length<2?c("The code should at least contain 2 characters",!0):(yield n(e),c("Configuration saved")):c("Please complete all the form",!0)})),children:"Save Preferences"}),H("div",{class:"flex justify-center gap-6 mt-2",children:[H("a",{class:"text-sm font-medium no-underline transition-colors text-amber-400 hover:text-amber-300",href:"https://www.buymeacoffee.com/yoannchbpro",target:"_blank",rel:"noopener noreferrer",children:"Support"}),H("a",{class:"text-sm font-medium no-underline transition-colors text-text-secondary hover:text-text-primary",href:"https://github.com/yoannchb-pro/MoodleGPT",target:"_blank",rel:"noopener noreferrer",children:"Docs"})]})]})}),{}),po)})); //# sourceMappingURL=popup.js.map diff --git a/extension/popup/popup.js.map b/extension/popup/popup.js.map index 8eaecf2..74d0022 100644 --- a/extension/popup/popup.js.map +++ b/extension/popup/popup.js.map @@ -1 +1 @@ -{"version":3,"file":"popup.js","sources":["../../src/popup/data.ts","../../node_modules/tslib/tslib.es6.js","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/utils.ts","../../src/popup/gpt-version.ts","../../src/popup/mode-handler.ts","../../src/popup/version.ts","../../src/popup/settings.ts","../../src/popup/index.ts"],"sourcesContent":[null,"/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null],"names":["globalData","actualMode","inputsCheckbox","modes","document","querySelector","querySelectorAll","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__classPrivateFieldSet","receiver","state","kind","f","has","TypeError","set","__classPrivateFieldGet","call","get","SuppressedError","uuid4","crypto","globalThis","randomUUID","bind","u8","Uint8Array","randomByte","getRandomValues","Math","random","replace","c","toString","isAbortError","err","name","String","message","includes","castToError","Error","Object","prototype","error","cause","stack","JSON","stringify","OpenAIError","APIError","constructor","status","headers","super","makeMessage","this","requestID","data","code","param","type","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","isArray","val","Array","isReadonlyArray","maybeObj","x","isObj","obj","sleep","ms","setTimeout","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","version","deno","platform","browserInfo","navigator","browserPatterns","key","pattern","match","exec","userAgent","browser","getBrowserInfo","toLowerCase","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","v","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","i","push","toUpperCase","limit","maybe_map","fn","mapped","length","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","parseInt","slice","out","j","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","filter","sort","sideChannel","tmp_sc","find_flag","pos","RangeError","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","map","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","console","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","event","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","shift","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","_","indexOf","partition","defaultParseResponse","props","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","split","trim","addRequestID","json","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","p","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","fetch","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","test","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","a","b","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","content","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","some","t","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","l","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","addEventListener","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","y","total","completion_tokens","prompt_tokens","total_tokens","n","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","every","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","min","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","req","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","clearTimeout","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","showMessage","isError","isInfinite","style","color","textContent","display","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","apiKeySelector","inputModel","modelsList","imagesIntegrationLine","baseURLSelector","projectIdSelector","maxTokensSelector","checkCanIncludeImages","versionNumber","isCurrentVersionSupportingImages","projectId","innerHTML","localeCompare","opt","createElement","appendChild","maxTokens","_f","_e","max_completion_tokens","json_schema","schema","properties","reply","success","number","required","additionalProperties","toExcludes","disabledForThisMode","autocomplete","clipboard","handleModeChange","needDisable","dontNeedDisable","parentElement","button","mode","classList","remove","CURRENT_VERSION","versionDisplay","setVersion","isCurrent","link","href","rel","target","createTextNode","lastVersion","getLastVersion","lastVertionSplitted","currentVersionSplitted","minVersionLength","notifyUpdate","settings","advencedSettings","switchSettings","preventDefault","saveBtn","inputsText","timeoutValue","selector","logs","title","typing","mouseover","infinite","history","includeImages","element","checked","chrome","storage","sync","moodleGPT","config"],"mappings":"2FAAO,MAAMA,EAAa,CAAEC,WAAY,gBAE3BC,EAAiB,CAC5B,OACA,QACA,SACA,SACA,YACA,WACA,UACA,UACA,iBAGWC,EADOC,SAASC,cAAc,SACjBC,iBAAiB,UCoGpC,SAASC,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,EAAQ,KAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,GACJ,CC1HA,SAASO,EAAuBC,EAAUC,EAAOX,EAAOY,EAAMC,GAK1D,GAAqB,mBAAVF,IAAmDA,EAAMG,IAAIJ,GACpE,MAAM,IAAIK,UAAU,2EACxB,OAAwEJ,EAAMK,IAAIN,EAAUV,GAAQA,CACxG,CACA,SAASiB,EAAuBP,EAAUC,EAAOC,EAAMC,GACnD,GAAa,MAATD,IAAiBC,EACjB,MAAM,IAAIE,UAAU,iDACxB,GAAqB,mBAAVJ,EAAuBD,IAAaC,IAAUE,GAAKF,EAAMG,IAAIJ,GACpE,MAAM,IAAIK,UAAU,4EACxB,MAAgB,MAATH,EAAeC,EAAa,MAATD,EAAeC,EAAEK,KAAKR,GAAYG,EAAIA,EAAEb,MAAQW,EAAMQ,IAAIT,EACxF,CDyTkD,mBAApBU,iBAAiCA,gBEpUxD,IAAIC,EAAQ,WACf,MAAMC,OAAEA,GAAWC,WACnB,GAAID,GAAQE,WAER,OADAH,EAAQC,EAAOE,WAAWC,KAAKH,GACxBA,EAAOE,aAElB,MAAME,EAAK,IAAIC,WAAW,GACpBC,EAAaN,EAAS,IAAMA,EAAOO,gBAAgBH,GAAI,GAAK,IAAuB,IAAhBI,KAAKC,SAAmB,IACjG,MAAO,uCAAuCC,QAAQ,UAAWC,KAAQA,EAAKL,IAAgB,KAAQK,EAAI,GAAMC,SAAS,KAC7H,ECZO,SAASC,EAAaC,GACzB,MAAuB,iBAARA,GACH,OAARA,IAEE,SAAUA,GAAoB,eAAbA,EAAIC,MAElB,YAAaD,GAAOE,OAAOF,EAAIG,SAASC,SAAS,iCAC9D,CACO,MAAMC,EAAeL,IACxB,GAAIA,aAAeM,MACf,OAAON,EACX,GAAmB,iBAARA,GAA4B,OAARA,EAAc,CACzC,IACI,GAA4C,mBAAxCO,OAAOC,UAAUV,SAAShB,KAAKkB,GAA2B,CAE1D,MAAMS,EAAQ,IAAIH,MAAMN,EAAIG,QAASH,EAAIU,MAAQ,CAAEA,MAAOV,EAAIU,OAAU,CAAA,GAQxE,OAPIV,EAAIW,QACJF,EAAME,MAAQX,EAAIW,OAElBX,EAAIU,QAAUD,EAAMC,QACpBD,EAAMC,MAAQV,EAAIU,OAClBV,EAAIC,OACJQ,EAAMR,KAAOD,EAAIC,MACdQ,CACX,CACJ,CACA,MAAQ,CACR,IACI,OAAO,IAAIH,MAAMM,KAAKC,UAAUb,GACpC,CACA,MAAQ,CACZ,CACA,OAAO,IAAIM,MAAMN,EAAI,EC/BlB,MAAMc,UAAoBR,OAE1B,MAAMS,UAAiBD,EAC1B,WAAAE,CAAYC,EAAQR,EAAON,EAASe,GAChCC,MAAM,GAAGJ,EAASK,YAAYH,EAAQR,EAAON,MAC7CkB,KAAKJ,OAASA,EACdI,KAAKH,QAAUA,EACfG,KAAKC,UAAYJ,GAASnC,IAAI,gBAC9BsC,KAAKZ,MAAQA,EACb,MAAMc,EAAOd,EACbY,KAAKG,KAAOD,GAAa,KACzBF,KAAKI,MAAQF,GAAc,MAC3BF,KAAKK,KAAOH,GAAa,IAC7B,CACA,kBAAOH,CAAYH,EAAQR,EAAON,GAC9B,MAAMwB,EAAMlB,GAAON,QACU,iBAAlBM,EAAMN,QACTM,EAAMN,QACJS,KAAKC,UAAUJ,EAAMN,SACzBM,EAAQG,KAAKC,UAAUJ,GACnBN,EACV,OAAIc,GAAUU,EACH,GAAGV,KAAUU,IAEpBV,EACO,GAAGA,0BAEVU,GAGG,0BACX,CACA,eAAOC,CAASX,EAAQY,EAAe1B,EAASe,GAC5C,IAAKD,IAAWC,EACZ,OAAO,IAAIY,EAAmB,CAAE3B,UAASO,MAAOL,EAAYwB,KAEhE,MAAMpB,EAAQoB,GAAuB,MACrC,OAAe,MAAXZ,EACO,IAAIc,EAAgBd,EAAQR,EAAON,EAASe,GAExC,MAAXD,EACO,IAAIe,EAAoBf,EAAQR,EAAON,EAASe,GAE5C,MAAXD,EACO,IAAIgB,EAAsBhB,EAAQR,EAAON,EAASe,GAE9C,MAAXD,EACO,IAAIiB,EAAcjB,EAAQR,EAAON,EAASe,GAEtC,MAAXD,EACO,IAAIkB,EAAclB,EAAQR,EAAON,EAASe,GAEtC,MAAXD,EACO,IAAImB,EAAyBnB,EAAQR,EAAON,EAASe,GAEjD,MAAXD,EACO,IAAIoB,EAAepB,EAAQR,EAAON,EAASe,GAElDD,GAAU,IACH,IAAIqB,EAAoBrB,EAAQR,EAAON,EAASe,GAEpD,IAAIH,EAASE,EAAQR,EAAON,EAASe,EAChD,EAEG,MAAMqB,UAA0BxB,EACnC,WAAAC,EAAYb,QAAEA,GAAY,IACtBgB,WAAMqB,OAAWA,EAAWrC,GAAW,4BAAwBqC,EACnE,EAEG,MAAMV,UAA2Bf,EACpC,WAAAC,EAAYb,QAAEA,EAAOO,MAAEA,IACnBS,WAAMqB,OAAWA,EAAWrC,GAAW,yBAAqBqC,GAGxD9B,IACAW,KAAKX,MAAQA,EACrB,EAEG,MAAM+B,UAAkCX,EAC3C,WAAAd,EAAYb,QAAEA,GAAY,IACtBgB,MAAM,CAAEhB,QAASA,GAAW,sBAChC,EAEG,MAAM4B,UAAwBhB,GAE9B,MAAMiB,UAA4BjB,GAElC,MAAMkB,UAA8BlB,GAEpC,MAAMmB,UAAsBnB,GAE5B,MAAMoB,UAAsBpB,GAE5B,MAAMqB,UAAiCrB,GAEvC,MAAMsB,UAAuBtB,GAE7B,MAAMuB,UAA4BvB,GAElC,MAAM2B,UAAgC5B,EACzC,WAAAE,GACIG,MAAM,mEACV,EAEG,MAAMwB,UAAuC7B,EAChD,WAAAE,GACIG,MAAM,qFACV,EAEG,MAAMyB,UAAqCtC,MAC9C,WAAAU,CAAYb,GACRgB,MAAMhB,EACV,EC/GJ,MAAM0C,EAAyB,uBAIxB,IAAIC,EAAWC,IAAUD,EAAUE,MAAMF,QAAUA,EAAQC,IACvDE,EAAkBH,EAEtB,SAASI,EAASC,GACrB,MAAiB,iBAANA,EACA,CAAA,EAEJA,GAAK,CAAA,CAChB,CAaO,SAASC,EAAMC,GAClB,OAAc,MAAPA,GAA8B,iBAARA,IAAqBL,MAAMF,QAAQO,EACpE,CAOO,MCpCMC,EAASC,GAAO,IAAI/F,SAASC,GAAY+F,WAAW/F,EAAS8F,KCD7DE,EAAU,SC0BvB,MAAMC,EAAwB,KAC1B,MAAMC,EAZc,oBAATC,MAAsC,MAAdA,KAAKC,MAC7B,OAEgB,oBAAhBC,YACA,OAEgG,qBAAvGvD,OAAOC,UAAUV,SAAShB,UAAmC,IAAvBK,WAAW4E,QAA0B5E,WAAW4E,QAAU,GACzF,OAEJ,UAIP,GAAyB,SAArBJ,EACA,MAAO,CACH,mBAAoB,KACpB,8BAA+BF,EAC/B,iBAAkBO,EAAkBJ,KAAKC,MAAMI,IAC/C,mBAAoBC,EAAcN,KAAKC,MAAMM,MAC7C,sBAAuB,OACvB,8BAAuD,iBAAjBP,KAAKQ,QAAuBR,KAAKQ,QAAUR,KAAKQ,SAASC,MAAQ,WAG/G,GAA2B,oBAAhBP,YACP,MAAO,CACH,mBAAoB,KACpB,8BAA+BL,EAC/B,iBAAkB,UAClB,mBAAoB,SAASK,cAC7B,sBAAuB,OACvB,8BAA+B3E,WAAW4E,QAAQK,SAI1D,GAAyB,SAArBT,EACA,MAAO,CACH,mBAAoB,KACpB,8BAA+BF,EAC/B,iBAAkBO,EAAkB7E,WAAW4E,QAAQO,UAAY,WACnE,mBAAoBJ,EAAc/E,WAAW4E,QAAQI,MAAQ,WAC7D,sBAAuB,OACvB,8BAA+BhF,WAAW4E,QAAQK,SAAW,WAGrE,MAAMG,EAsBV,WACI,GAAyB,oBAAdC,YAA8BA,UACrC,OAAO,KAGX,MAAMC,EAAkB,CACpB,CAAEC,IAAK,OAAQC,QAAS,wCACxB,CAAED,IAAK,KAAMC,QAAS,wCACtB,CAAED,IAAK,KAAMC,QAAS,8CACtB,CAAED,IAAK,SAAUC,QAAS,0CAC1B,CAAED,IAAK,UAAWC,QAAS,2CAC3B,CAAED,IAAK,SAAUC,QAAS,sEAG9B,IAAK,MAAMD,IAAEA,EAAGC,QAAEA,KAAaF,EAAiB,CAC5C,MAAMG,EAAQD,EAAQE,KAAKL,UAAUM,WACrC,GAAIF,EAAO,CAIP,MAAO,CAAEG,QAASL,EAAKN,QAAS,GAHlBQ,EAAM,IAAM,KACZA,EAAM,IAAM,KACZA,EAAM,IAAM,IAE9B,CACJ,CACA,OAAO,IACX,CA9CwBI,GACpB,OAAIT,EACO,CACH,mBAAoB,KACpB,8BAA+Bd,EAC/B,iBAAkB,UAClB,mBAAoB,UACpB,sBAAuB,WAAWc,EAAYQ,UAC9C,8BAA+BR,EAAYH,SAI5C,CACH,mBAAoB,KACpB,8BAA+BX,EAC/B,iBAAkB,UAClB,mBAAoB,UACpB,sBAAuB,UACvB,8BAA+B,UAClC,EA4BL,MAAMS,EAAiBC,GAKN,QAATA,EACO,MACE,WAATA,GAA8B,QAATA,EACd,MACE,QAATA,EACO,MACE,YAATA,GAA+B,UAATA,EACf,QACPA,EACO,SAASA,IACb,UAELH,EAAqBM,IAMvBA,EAAWA,EAASW,eAKP7E,SAAS,OACX,MACM,YAAbkE,EACO,UACM,WAAbA,EACO,QACM,UAAbA,EACO,UACM,YAAbA,EACO,UACM,YAAbA,EACO,UACM,UAAbA,EACO,QACPA,EACO,SAASA,IACb,UAEX,IAAIY,ECjJG,SAASC,KAAsBC,GAClC,MAAMC,EAAiBlG,WAAWkG,eAClC,QAA8B,IAAnBA,EAGP,MAAM,IAAI/E,MAAM,2HAEpB,OAAO,IAAI+E,KAAkBD,EACjC,CACO,SAASE,EAAmBC,GAC/B,IAAIC,EAAOC,OAAOC,iBAAiBH,EAAWA,EAASE,OAAOC,iBAAmBH,EAASE,OAAOE,YACjG,OAAOR,EAAmB,CACtB,KAAAS,GAAU,EACV,UAAMC,CAAKC,GACP,MAAM5H,KAAEA,EAAIN,MAAEA,SAAgB4H,EAAK1H,OAC/BI,EACA4H,EAAWC,QAGXD,EAAWE,QAAQpI,EAE3B,EACA,YAAMqI,SACIT,EAAKU,WACf,GAER,CAOO,SAASC,EAA8BC,GAC1C,GAAIA,EAAOX,OAAOC,eACd,OAAOU,EACX,MAAMC,EAASD,EAAOE,YACtB,MAAO,CACH,UAAMxI,GACF,IACI,MAAMG,QAAeoI,EAAOE,OAG5B,OAFItI,GAAQC,MACRmI,EAAOG,cACJvI,CACX,CACA,MAAOF,GAEH,MADAsI,EAAOG,cACDzI,CACV,CACJ,EACA,YAAM,GACF,MAAM0I,EAAgBJ,EAAOJ,SAG7B,OAFAI,EAAOG,oBACDC,EACC,CAAEvI,MAAM,EAAMN,WAAO4E,EAChC,EACA,CAACiD,OAAOC,iBACJ,OAAOrE,IACX,EAER,CClEO,MAAMqF,EAAkB,EAAGxF,UAASyF,WAChC,CACHC,YAAa,CACT,eAAgB,oBAEpBD,KAAM/F,KAAKC,UAAU8F,KCNhBE,EAAiB,UACjBC,EAAqBC,GAAM7G,OAAO6G,GAClCC,EAAa,CACtBC,QAAUF,GAAM7G,OAAO6G,GAAGnH,QAAQ,OAAQ,KAC1CsH,QAASJ,GCFN,IAAIpI,EAAM,CAAC2E,EAAKqB,KAAUhG,EAAM6B,OAAO4G,QAAUC,SAAS5G,UAAU1B,KAAKO,KAAKkB,OAAOC,UAAU6G,gBAClG3I,EAAI2E,EAAKqB,IACb,MAAM4C,EAA4B,MAC9B,MAAMC,EAAQ,GACd,IAAK,IAAIC,EAAI,EAAGA,EAAI,MAAOA,EACvBD,EAAME,KAAK,MAAQD,EAAI,GAAK,IAAM,IAAMA,EAAE1H,SAAS,KAAK4H,eAE5D,OAAOH,CACV,EANiC,GA4G5BI,EAAQ,KA8FP,SAASC,EAAU7E,EAAK8E,GAC3B,GAAI/E,EAAQC,GAAM,CACd,MAAM+E,EAAS,GACf,IAAK,IAAIN,EAAI,EAAGA,EAAIzE,EAAIgF,OAAQP,GAAK,EACjCM,EAAOL,KAAKI,EAAG9E,EAAIyE,KAEvB,OAAOM,CACX,CACA,OAAOD,EAAG9E,EACd,CCpNA,MAAMiF,EAA0B,CAC5BC,SAASC,GACEhI,OAAOgI,GAAU,KAE5BC,MAAO,QACPC,QAAO,CAACF,EAAQxD,IACLxE,OAAOgI,GAAU,IAAMxD,EAAM,IAExC2D,OAAOH,GACIhI,OAAOgI,IAGhBI,EAAgB,SAAUC,EAAKC,GACjCxF,MAAMxC,UAAUiH,KAAKrJ,MAAMmK,EAAKzF,EAAQ0F,GAAkBA,EAAiB,CAACA,GAChF,EACA,IAAIC,EACJ,MAAMC,EAAW,CACbC,gBAAgB,EAChBC,WAAW,EACXC,kBAAkB,EAClBC,YAAa,UACbC,QAAS,QACTC,iBAAiB,EACjBC,UAAW,IACXC,QAAQ,EACRC,iBAAiB,EACjBC,QDoFkB,CAACC,EAAKC,EAAiBP,EAASQ,EAAOC,KAGzD,GAAmB,IAAfH,EAAItB,OACJ,OAAOsB,EAEX,IAAII,EAASJ,EAOb,GANmB,iBAARA,EACPI,EAAShE,OAAOjF,UAAUV,SAAShB,KAAKuK,GAEpB,iBAARA,IACZI,EAASvJ,OAAOmJ,IAEJ,eAAZN,EACA,OAAOW,OAAOD,GAAQ7J,QAAQ,mBAAmB,SAAU+J,GACvD,MAAO,SAAWC,SAASD,EAAGE,MAAM,GAAI,IAAM,KAClD,IAEJ,IAAIC,EAAM,GACV,IAAK,IAAIC,EAAI,EAAGA,EAAIN,EAAO1B,OAAQgC,GAAKpC,EAAO,CAC3C,MAAMqC,EAAUP,EAAO1B,QAAUJ,EAAQ8B,EAAOI,MAAME,EAAGA,EAAIpC,GAAS8B,EAChElB,EAAM,GACZ,IAAK,IAAIf,EAAI,EAAGA,EAAIwC,EAAQjC,SAAUP,EAAG,CACrC,IAAI3H,EAAImK,EAAQC,WAAWzC,GACjB,KAAN3H,GACM,KAANA,GACM,KAANA,GACM,MAANA,GACCA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,IAClBA,GAAK,IAAQA,GAAK,KDzIZ,YC0IN2J,IAA6B,KAAN3J,GAAoB,KAANA,GAEtC0I,EAAIA,EAAIR,QAAUiC,EAAQE,OAAO1C,GAGjC3H,EAAI,IACJ0I,EAAIA,EAAIR,QAAUT,EAAUzH,GAG5BA,EAAI,KACJ0I,EAAIA,EAAIR,QAAUT,EAAU,IAAQzH,GAAK,GAAMyH,EAAU,IAAY,GAAJzH,GAGjEA,EAAI,OAAUA,GAAK,MACnB0I,EAAIA,EAAIR,QACJT,EAAU,IAAQzH,GAAK,IAAOyH,EAAU,IAASzH,GAAK,EAAK,IAASyH,EAAU,IAAY,GAAJzH,IAG9F2H,GAAK,EACL3H,EAAI,QAAiB,KAAJA,IAAc,GAA+B,KAAxBmK,EAAQC,WAAWzC,IACzDe,EAAIA,EAAIR,QACJT,EAAU,IAAQzH,GAAK,IACnByH,EAAU,IAASzH,GAAK,GAAM,IAC9ByH,EAAU,IAASzH,GAAK,EAAK,IAC7ByH,EAAU,IAAY,GAAJzH,GAC9B,CACAiK,GAAOvB,EAAI4B,KAAK,GACpB,CACA,OAAOL,CAAG,EC9IVM,kBAAkB,EAClBZ,OAAQ3C,EACRwD,UAAWvD,EAEXsB,SAAS,EACTkC,cAAcC,IACF9B,IAAgBA,EAAcrB,SAAS5G,UAAU1B,KAAKO,KAAKmL,KAAKhK,UAAUiI,eAAe8B,GAErGE,WAAW,EACXC,oBAAoB,GASxB,MAAMC,EAAW,CAAA,EACjB,SAASC,EAAgBC,EAAQ3C,EAAQ4C,EAAqBC,EAAgBlC,EAAkB6B,EAAoBD,EAAWtB,EAAiBC,EAAS4B,EAAQC,EAAMrC,EAAW0B,EAAed,EAAQa,EAAWD,EAAkBrB,EAASmC,GAC3O,IAAI7H,EAAMwH,EACNM,EAASD,EACTrN,EAAO,EACPuN,GAAY,EAChB,UAA2C,KAAnCD,EAASA,EAAOpM,IAAI4L,MAAkCS,GAAW,CAErE,MAAMC,EAAMF,EAAOpM,IAAI8L,GAEvB,GADAhN,GAAQ,OACW,IAARwN,EAAqB,CAC5B,GAAIA,IAAQxN,EACR,MAAM,IAAIyN,WAAW,uBAGrBF,GAAY,CAEpB,MACoC,IAAzBD,EAAOpM,IAAI4L,KAClB9M,EAAO,EAEf,CAeA,GAdsB,mBAAXmN,EACP3H,EAAM2H,EAAO9C,EAAQ7E,GAEhBA,aAAemH,KACpBnH,EAAMiH,IAAgBjH,GAEO,UAAxByH,GAAmChI,EAAQO,KAChDA,EAAMuE,EAAUvE,GAAK,SAAUzF,GAC3B,OAAIA,aAAiB4M,KACVF,IAAgB1M,GAEpBA,CACX,KAEQ,OAARyF,EAAc,CACd,GAAIqH,EACA,OAAOtB,IAAYgB,EAEfhB,EAAQlB,EAAQQ,EAASU,QAASL,EAAS,MAAOS,GAChDtB,EAEV7E,EAAM,EACV,CACA,GAnDqB,iBADS0D,EAoDD1D,IAlDZ,iBAAN0D,GACM,kBAANA,GACM,iBAANA,GACM,iBAANA,GDuJR,SAAmB1D,GACtB,SAAKA,GAAsB,iBAARA,KAGTA,EAAIrC,aAAeqC,EAAIrC,YAAYuK,UAAYlI,EAAIrC,YAAYuK,SAASlI,IACtF,CC7GyCmI,CAAUnI,GAAM,CACjD,GAAI+F,EAAS,CACT,MAAMqC,EAAYrB,EAAmBlC,EAE/BkB,EAAQlB,EAAQQ,EAASU,QAASL,EAAS,MAAOS,GACxD,MAAO,CACHa,IAAYoB,GACR,IAEApB,IAAYjB,EAAQ/F,EAAKqF,EAASU,QAASL,EAAS,QAASS,IAEzE,CACA,MAAO,CAACa,IAAYnC,GAAU,IAAMmC,IAAYnK,OAAOmD,IAC3D,CAjEJ,IAAkC0D,EAkE9B,MAAM2E,EAAS,GACf,QAAmB,IAARrI,EACP,OAAOqI,EAEX,IAAIC,EACJ,GAA4B,UAAxBb,GAAmChI,EAAQO,GAEvC+G,GAAoBhB,IAEpB/F,EAAMuE,EAAUvE,EAAK+F,IAEzBuC,EAAW,CAAC,CAAE/N,MAAOyF,EAAI0E,OAAS,EAAI1E,EAAI8G,KAAK,MAAQ,UAAO,SAE7D,GAAIrH,EAAQkI,GACbW,EAAWX,MAEV,CACD,MAAMY,EAAOrL,OAAOqL,KAAKvI,GACzBsI,EAAWV,EAAOW,EAAKX,KAAKA,GAAQW,CACxC,CACA,MAAMC,EAAiB1C,EAAkBjJ,OAAOgI,GAAQtI,QAAQ,MAAO,OAASM,OAAOgI,GACjF4D,EAAkBf,GAAkBjI,EAAQO,IAAuB,IAAfA,EAAI0E,OAAe8D,EAAiB,KAAOA,EACrG,GAAIhD,GAAoB/F,EAAQO,IAAuB,IAAfA,EAAI0E,OACxC,OAAO+D,EAAkB,KAE7B,IAAK,IAAI/B,EAAI,EAAGA,EAAI4B,EAAS5D,SAAUgC,EAAG,CACtC,MAAMrF,EAAMiH,EAAS5B,GACfnM,EAES,iBAAR8G,QAAyC,IAAdA,EAAI9G,MAAwB8G,EAAI9G,MAAQyF,EAAIqB,GAC9E,GAAI+F,GAAuB,OAAV7M,EACb,SAGJ,MAAMmO,EAAcnD,GAAaO,EAAkBzE,EAAI9E,QAAQ,MAAO,OAAS8E,EACzEsH,EAAalJ,EAAQO,GACQ,mBAAxByH,EACHA,EAAoBgB,EAAiBC,GACnCD,EACJA,GAAmBlD,EAAY,IAAMmD,EAAc,IAAMA,EAAc,KAC7Eb,EAAYtM,IAAIiM,EAAQhN,GACxB,MAAMoO,EAAmB,IAAIC,QAC7BD,EAAiBrN,IAAI+L,EAAUO,GAC/B5C,EAAcoD,EAAQd,EAAgBhN,EAAOoO,EAAYlB,EAAqBC,EAAgBlC,EAAkB6B,EAAoBD,EAAWtB,EAEvH,UAAxB2B,GAAmCV,GAAoBtH,EAAQO,GAAO,KAAO+F,EAAS4B,EAAQC,EAAMrC,EAAW0B,EAAed,EAAQa,EAAWD,EAAkBrB,EAASkD,GAChL,CACA,OAAOP,CACX,CAqEO,SAAS7K,EAAUgK,EAAQsB,EAAO,IACrC,IAAI9I,EAAMwH,EACV,MAAMuB,EAtEV,SAAqCD,EAAOzD,GACxC,QAAqC,IAA1ByD,EAAKtD,kBAAqE,kBAA1BsD,EAAKtD,iBAC5D,MAAM,IAAIlK,UAAU,0EAExB,QAAoC,IAAzBwN,EAAKhD,iBAAmE,kBAAzBgD,EAAKhD,gBAC3D,MAAM,IAAIxK,UAAU,yEAExB,GAAqB,OAAjBwN,EAAK/C,cAA4C,IAAjB+C,EAAK/C,SAAmD,mBAAjB+C,EAAK/C,QAC5E,MAAM,IAAIzK,UAAU,iCAExB,MAAMoK,EAAUoD,EAAKpD,SAAWL,EAASK,QACzC,QAA4B,IAAjBoD,EAAKpD,SAA4C,UAAjBoD,EAAKpD,SAAwC,eAAjBoD,EAAKpD,QACxE,MAAM,IAAIpK,UAAU,qEAExB,IAAI6K,EAAS3C,EACb,QAA2B,IAAhBsF,EAAK3C,OAAwB,CACpC,IAAK9K,EAAIsI,EAAYmF,EAAK3C,QACtB,MAAM,IAAI7K,UAAU,mCAExB6K,EAAS2C,EAAK3C,MAClB,CACA,MAAMa,EAAYrD,EAAWwC,GAC7B,IAIIV,EAJAkC,EAAStC,EAASsC,OActB,IAb2B,mBAAhBmB,EAAKnB,QAAyBlI,EAAQqJ,EAAKnB,WAClDA,EAASmB,EAAKnB,QAIdlC,EADAqD,EAAKrD,aAAeqD,EAAKrD,eAAed,EAC1BmE,EAAKrD,YAEd,YAAaqD,EACJA,EAAK/D,QAAU,UAAY,SAG3BM,EAASI,YAEvB,mBAAoBqD,GAAuC,kBAAxBA,EAAKpB,eACxC,MAAM,IAAIpM,UAAU,iDAExB,MAAMiK,OAAsC,IAAnBuD,EAAKvD,UACC,KAAzBuD,EAAKhD,iBAEDT,EAASE,YACXuD,EAAKvD,UACb,MAAO,CACHD,eAA+C,kBAAxBwD,EAAKxD,eAA+BwD,EAAKxD,eAAiBD,EAASC,eAE1FC,UAAWA,EACXC,iBAAmD,kBAA1BsD,EAAKtD,mBAAmCsD,EAAKtD,iBAAmBH,EAASG,iBAClGC,YAAaA,EACbC,QAASA,EACTC,gBAAiD,kBAAzBmD,EAAKnD,gBAAgCmD,EAAKnD,gBAAkBN,EAASM,gBAC7F+B,iBAAkBoB,EAAKpB,eACvB9B,eAAqC,IAAnBkD,EAAKlD,UAA4BP,EAASO,UAAYkD,EAAKlD,UAC7EC,OAA+B,kBAAhBiD,EAAKjD,OAAuBiD,EAAKjD,OAASR,EAASQ,OAClEC,gBAAiD,kBAAzBgD,EAAKhD,gBAAgCgD,EAAKhD,gBAAkBT,EAASS,gBAC7FC,QAAiC,mBAAjB+C,EAAK/C,QAAyB+C,EAAK/C,QAAUV,EAASU,QACtEgB,iBAAmD,kBAA1B+B,EAAK/B,iBAAiC+B,EAAK/B,iBAAmB1B,EAAS0B,iBAChGY,OAAQA,EACRxB,OAAQA,EACRa,UAAWA,EACXC,cAA6C,mBAAvB6B,EAAK7B,cAA+B6B,EAAK7B,cAAgB5B,EAAS4B,cACxFG,UAAqC,kBAAnB0B,EAAK1B,UAA0B0B,EAAK1B,UAAY/B,EAAS+B,UAE3EQ,KAA2B,mBAAdkB,EAAKlB,KAAsBkB,EAAKlB,KAAO,KACpDP,mBAAuD,kBAA5ByB,EAAKzB,mBAAmCyB,EAAKzB,mBAAqBhC,EAASgC,mBAE9G,CAGoB2B,CAA4BF,GAC5C,IAAIR,EACAX,EAC0B,mBAAnBoB,EAAQpB,QACfA,EAASoB,EAAQpB,OACjB3H,EAAM2H,EAAO,GAAI3H,IAEZP,EAAQsJ,EAAQpB,UACrBA,EAASoB,EAAQpB,OACjBW,EAAWX,GAEf,MAAMY,EAAO,GACb,GAAmB,iBAARvI,GAA4B,OAARA,EAC3B,MAAO,GAEX,MAAMyH,EAAsB9C,EAAwBoE,EAAQtD,aACtDiC,EAAyC,UAAxBD,GAAmCsB,EAAQrB,eAC7DY,IACDA,EAAWpL,OAAOqL,KAAKvI,IAEvB+I,EAAQnB,MACRU,EAASV,KAAKmB,EAAQnB,MAE1B,MAAMC,EAAc,IAAIgB,QACxB,IAAK,IAAI1E,EAAI,EAAGA,EAAImE,EAAS5D,SAAUP,EAAG,CACtC,MAAM9C,EAAMiH,EAASnE,GACjB4E,EAAQ3B,WAA0B,OAAbpH,EAAIqB,IAG7B4D,EAAcsD,EAAMhB,EAAgBvH,EAAIqB,GAAMA,EAE9CoG,EAAqBC,EAAgBqB,EAAQvD,iBAAkBuD,EAAQ1B,mBAAoB0B,EAAQ3B,UAAW2B,EAAQjD,gBAAiBiD,EAAQlD,OAASkD,EAAQhD,QAAU,KAAMgD,EAAQpB,OAAQoB,EAAQnB,KAAMmB,EAAQxD,UAAWwD,EAAQ9B,cAAe8B,EAAQ5C,OAAQ4C,EAAQ/B,UAAW+B,EAAQhC,iBAAkBgC,EAAQrD,QAASmC,GAC1U,CACA,MAAMoB,EAASV,EAAKzB,KAAKiC,EAAQnD,WACjC,IAAIf,GAAoC,IAA3BkE,EAAQzD,eAA0B,IAAM,GAWrD,OAVIyD,EAAQpD,kBACgB,eAApBoD,EAAQrD,QAERb,GAAU,uBAIVA,GAAU,mBAGXoE,EAAOvE,OAAS,EAAIG,EAASoE,EAAS,EACjD,CCnQA,IAAIC,GAMAC,GALG,SAASC,GAAWpD,GACvB,IAAID,EACJ,OAAQmD,KACFnD,EAAU,IAAIjK,WAAWuN,YAAiBH,GAAcnD,EAAQF,OAAO7J,KAAK+J,KAAYC,EAClG,CAEO,SAASsD,GAAWC,GACvB,IAAIC,EACJ,OAAQL,KACFK,EAAU,IAAI1N,WAAW2N,YAAiBN,GAAcK,EAAQE,OAAO1N,KAAKwN,KAAYD,EAClG,CCxBA,IAAII,GAAqBC,GASlB,MAAMC,GACT,WAAAlM,GACIgM,GAAoBpO,IAAIyC,UAAM,GAC9B4L,GAAiCrO,IAAIyC,UAAM,GAC3ChD,EAAuBgD,KAAM2L,GAAqB,IAAIzN,YACtDlB,EAAuBgD,KAAM4L,GAAkC,KACnE,CACA,MAAAF,CAAOI,GACH,GAAa,MAATA,EACA,MAAO,GAEX,MAAMC,EAAcD,aAAiBE,YAAc,IAAI9N,WAAW4N,GAC3C,iBAAVA,EAAqBV,GAAWU,GACnCA,EACV9O,EAAuBgD,KAAM2L,GDvB9B,SAAqBM,GACxB,IAAIvF,EAAS,EACb,IAAK,MAAMwF,KAAUD,EACjBvF,GAAUwF,EAAOxF,OAErB,MAAMyF,EAAS,IAAIjO,WAAWwI,GAC9B,IAAI0F,EAAQ,EACZ,IAAK,MAAMF,KAAUD,EACjBE,EAAO5O,IAAI2O,EAAQE,GACnBA,GAASF,EAAOxF,OAEpB,OAAOyF,CACX,CCW0DE,CAAY,CAAC7O,EAAuBwC,KAAM2L,GAAqB,KAAMI,KACvH,MAAMO,EAAQ,GACd,IAAIC,EACJ,KAAyK,OAAjKA,EAAeC,GAAiBhP,EAAuBwC,KAAM2L,GAAqB,KAAMnO,EAAuBwC,KAAM4L,GAAkC,QAAgB,CAC3K,GAAIW,EAAaE,UAAmF,MAAvEjP,EAAuBwC,KAAM4L,GAAkC,KAAc,CAEtG5O,EAAuBgD,KAAM4L,GAAkCW,EAAaH,OAC5E,QACJ,CAEA,GAA2E,MAAvE5O,EAAuBwC,KAAM4L,GAAkC,OAC9DW,EAAaH,QAAU5O,EAAuBwC,KAAM4L,GAAkC,KAAO,GAAKW,EAAaE,UAAW,CAC3HH,EAAMlG,KAAKkF,GAAW9N,EAAuBwC,KAAM2L,GAAqB,KAAKe,SAAS,EAAGlP,EAAuBwC,KAAM4L,GAAkC,KAAO,KAC/J5O,EAAuBgD,KAAM2L,GAAqBnO,EAAuBwC,KAAM2L,GAAqB,KAAKe,SAASlP,EAAuBwC,KAAM4L,GAAkC,OACjL5O,EAAuBgD,KAAM4L,GAAkC,MAC/D,QACJ,CACA,MAAMe,EAAmF,OAAxEnP,EAAuBwC,KAAM4L,GAAkC,KAAgBW,EAAaK,UAAY,EAAIL,EAAaK,UACpIC,EAAOvB,GAAW9N,EAAuBwC,KAAM2L,GAAqB,KAAKe,SAAS,EAAGC,IAC3FL,EAAMlG,KAAKyG,GACX7P,EAAuBgD,KAAM2L,GAAqBnO,EAAuBwC,KAAM2L,GAAqB,KAAKe,SAASH,EAAaH,QAC/HpP,EAAuBgD,KAAM4L,GAAkC,KACnE,CACA,OAAOU,CACX,CACA,KAAAQ,GACI,OAAKtP,EAAuBwC,KAAM2L,GAAqB,KAAKjF,OAGrD1G,KAAK0L,OAAO,MAFR,EAGf,EAeJ,SAASc,GAAiBN,EAAQa,GAG9B,IAAK,IAAI5G,EAAI4G,GAAc,EAAG5G,EAAI+F,EAAOxF,OAAQP,IAAK,CAClD,GAHY,KAGR+F,EAAO/F,GACP,MAAO,CAAEyG,UAAWzG,EAAGiG,MAAOjG,EAAI,EAAGsG,UAAU,GAEnD,GALa,KAKTP,EAAO/F,GACP,MAAO,CAAEyG,UAAWzG,EAAGiG,MAAOjG,EAAI,EAAGsG,UAAU,EAEvD,CACA,OAAO,IACX,CACO,SAASO,GAAuBd,GAMnC,IAAK,IAAI/F,EAAI,EAAGA,EAAI+F,EAAOxF,OAAS,EAAGP,IAAK,CACxC,GAHY,KAGR+F,EAAO/F,IAHC,KAGiB+F,EAAO/F,EAAI,GAEpC,OAAOA,EAAI,EAEf,GANa,KAMT+F,EAAO/F,IANE,KAMiB+F,EAAO/F,EAAI,GAErC,OAAOA,EAAI,EAEf,GAVa,KAUT+F,EAAO/F,IAXC,KAYR+F,EAAO/F,EAAI,IACXA,EAAI,EAAI+F,EAAOxF,QAZN,KAaTwF,EAAO/F,EAAI,IAdH,KAeR+F,EAAO/F,EAAI,GAEX,OAAOA,EAAI,CAEnB,CACA,OAAO,CACX,CAnDAwF,GAAsB,IAAId,QAAWe,GAAmC,IAAIf,QAE5EgB,GAAYoB,cAAgB,IAAIC,IAAI,CAAC,KAAM,OAC3CrB,GAAYsB,eAAiB,eCxD7B,MAAMC,GAAe,CACjBC,IAAK,EACLjO,MAAO,IACPkO,KAAM,IACNC,KAAM,IACNC,MAAO,KAEEC,GAAgB,CAACC,EAAYC,EAAYC,KXgB/C,IAAgB5L,EAAKqB,EWfxB,GAAKqK,EAGL,OXYmB1L,EWZRoL,GXYa/J,EWZCqK,EXalBxO,OAAOC,UAAU6G,eAAevI,KAAKuE,EAAKqB,GWZtCqK,OAEXG,GAAUD,GAAQN,KAAK,GAAGK,gBAAyBpO,KAAKC,UAAUkO,uBAAgCnO,KAAKC,UAAUN,OAAOqL,KAAK6C,OAC7G,EAEpB,SAASU,KAAS,CAClB,SAASC,GAAUC,EAASC,EAAQC,GAChC,OAAKD,GAAUb,GAAaY,GAAWZ,GAAac,GACzCJ,GAIAG,EAAOD,GAAShQ,KAAKiQ,EAEpC,CACA,MAAME,GAAa,CACf/O,MAAO0O,GACPR,KAAMQ,GACNP,KAAMO,GACNN,MAAOM,IAEX,IAAIM,GAAgC,IAAIvD,QACjC,SAASgD,GAAUD,GACtB,MAAMK,EAASL,EAAOK,OAChBC,EAAWN,EAAOM,UAAY,MACpC,IAAKD,EACD,OAAOE,GAEX,MAAME,EAAeD,GAAc1Q,IAAIuQ,GACvC,GAAII,GAAgBA,EAAa,KAAOH,EACpC,OAAOG,EAAa,GAExB,MAAMC,EAAc,CAChBlP,MAAO2O,GAAU,QAASE,EAAQC,GAClCZ,KAAMS,GAAU,OAAQE,EAAQC,GAChCX,KAAMQ,GAAU,OAAQE,EAAQC,GAChCV,MAAOO,GAAU,QAASE,EAAQC,IAGtC,OADAE,GAAc7Q,IAAI0Q,EAAQ,CAACC,EAAUI,IAC9BA,CACX,CACO,MAAMC,GAAwBC,IAC7BA,EAAQzD,UACRyD,EAAQzD,QAAU,IAAKyD,EAAQzD,gBACxByD,EAAQzD,QAAiB,SAEhCyD,EAAQ3O,UACR2O,EAAQ3O,QAAUX,OAAOuP,aAAaD,EAAQ3O,mBAAmB6O,QAAU,IAAIF,EAAQ3O,SAAWX,OAAOyP,QAAQH,EAAQ3O,UAAU+O,KAAI,EAAEhQ,EAAMrC,KAAW,CACtJqC,EACwB,kBAAvBA,EAAKgF,eACqB,WAAvBhF,EAAKgF,eACkB,eAAvBhF,EAAKgF,cACL,MACErH,OAGV,wBAAyBiS,IACrBA,EAAQK,sBACRL,EAAQM,QAAUN,EAAQK,4BAEvBL,EAAQK,qBAEZL,GC5EX,IAAIO,GCCAC,GCAAC,GFSG,MAAMC,GACT,WAAAvP,CAAY2E,EAAUG,EAAYmJ,GAC9B5N,KAAKsE,SAAWA,EAChByK,GAAexR,IAAIyC,UAAM,GACzBA,KAAKyE,WAAaA,EAClBzH,EAAuBgD,KAAM+O,GAAgBnB,EACjD,CACA,sBAAOuB,CAAgBC,EAAU3K,EAAYmJ,GACzC,IAAIyB,GAAW,EACf,MAAMpB,EAASL,EAASC,GAAUD,GAAU0B,QA6D5C,OAAO,IAAIJ,IA5DXK,kBACI,GAAIF,EACA,MAAM,IAAI5P,EAAY,4EAE1B4P,GAAW,EACX,IAAIxS,GAAO,EACX,IACI,UAAW,MAAM2S,KAgK1BD,gBAAiCH,EAAU3K,GAC9C,IAAK2K,EAAS9J,KAAM,CAEhB,GADAb,EAAWgL,aACyB,IAAzB3R,WAAWqF,WACe,gBAAjCrF,WAAWqF,UAAUuM,QACrB,MAAM,IAAIjQ,EAAY,kKAE1B,MAAM,IAAIA,EAAY,oDAC1B,CACA,MAAMkQ,EAAa,IAAIC,GACjBC,EAAc,IAAIhE,GAClB1H,EAAOW,EAA8BsK,EAAS9J,MACpD,UAAW,MAAMwK,KAiBrBP,gBAA8BjL,GAC1B,IAAIpE,EAAO,IAAIhC,WACf,UAAW,MAAM4N,KAASxH,EAAU,CAChC,GAAa,MAATwH,EACA,SAEJ,MAAMC,EAAcD,aAAiBE,YAAc,IAAI9N,WAAW4N,GAC3C,iBAAVA,EAAqBV,GAAWU,GACnCA,EACV,IAIIS,EAJAwD,EAAU,IAAI7R,WAAWgC,EAAKwG,OAASqF,EAAYrF,QAKvD,IAJAqJ,EAAQxS,IAAI2C,GACZ6P,EAAQxS,IAAIwO,EAAa7L,EAAKwG,QAC9BxG,EAAO6P,GAEkD,KAAjDxD,EAAeS,GAAuB9M,WACpCA,EAAKsI,MAAM,EAAG+D,GACpBrM,EAAOA,EAAKsI,MAAM+D,EAE1B,CACIrM,EAAKwG,OAAS,UACRxG,EAEd,CAvCiC8P,CAAc7L,GACvC,IAAK,MAAM0I,KAAQgD,EAAYnE,OAAOoE,GAAW,CAC7C,MAAMN,EAAMG,EAAWjE,OAAOmB,GAC1B2C,UACMA,EACd,CAEJ,IAAK,MAAM3C,KAAQgD,EAAY/C,QAAS,CACpC,MAAM0C,EAAMG,EAAWjE,OAAOmB,GAC1B2C,UACMA,EACd,CACJ,CAxLwCS,CAAiBb,EAAU3K,GAC/C,IAAI5H,EAEJ,GAAI2S,EAAItP,KAAKgQ,WAAW,UACpBrT,GAAO,OAGX,GAAkB,OAAd2S,EAAIW,OAAmBX,EAAIW,MAAMD,WAAW,WAe3C,CACD,IAAIhQ,EACJ,IACIA,EAAOX,KAAK6Q,MAAMZ,EAAItP,KAC1B,CACA,MAAOxD,GAGH,MAFA4S,QAAQlQ,MAAM,qCAAsCoQ,EAAItP,MACxDoP,QAAQlQ,MAAM,cAAeoQ,EAAIa,KAC3B3T,CACV,CAEA,GAAiB,SAAb8S,EAAIW,MACJ,MAAM,IAAIzQ,OAASyB,EAAWjB,EAAKd,MAAOc,EAAKpB,aAASqC,QAEtD,CAAEgP,MAAOX,EAAIW,MAAOjQ,KAAMA,EACpC,KA9B4D,CACxD,IAAIA,EACJ,IACIA,EAAOX,KAAK6Q,MAAMZ,EAAItP,KAC1B,CACA,MAAOxD,GAGH,MAFAuR,EAAO7O,MAAM,qCAAsCoQ,EAAItP,MACvD+N,EAAO7O,MAAM,cAAeoQ,EAAIa,KAC1B3T,CACV,CACA,GAAIwD,GAAQA,EAAKd,MACb,MAAM,IAAIM,OAASyB,EAAWjB,EAAKd,WAAO+B,EAAWiO,EAASvP,eAE5DK,CACV,CAkBJrD,GAAO,CACX,CACA,MAAOH,GAEH,GAAIgC,EAAahC,GACb,OACJ,MAAMA,CACV,CACZ,QAEqBG,GACD4H,EAAWgL,OACnB,CACJ,GAC4BhL,EAAYmJ,EAC5C,CAKA,yBAAO0C,CAAmBC,EAAgB9L,EAAYmJ,GAClD,IAAIyB,GAAW,EAwCf,OAAO,IAAIH,IA3BXK,kBACI,GAAIF,EACA,MAAM,IAAI5P,EAAY,4EAE1B4P,GAAW,EACX,IAAIxS,GAAO,EACX,IACI,UAAW,MAAMgQ,KAnBzB0C,kBACI,MAAMM,EAAc,IAAIhE,GAClB1H,EAAOW,EAA8ByL,GAC3C,UAAW,MAAMzE,KAAS3H,EACtB,IAAK,MAAM0I,KAAQgD,EAAYnE,OAAOI,SAC5Be,EAGd,IAAK,MAAMA,KAAQgD,EAAY/C,cACrBD,CAEd,CAQiC2D,GACjB3T,GAEAgQ,UACMtN,KAAK6Q,MAAMvD,IAEzBhQ,GAAO,CACX,CACA,MAAOH,GAEH,GAAIgC,EAAahC,GACb,OACJ,MAAMA,CACV,CACZ,QAEqBG,GACD4H,EAAWgL,OACnB,CACJ,GAC4BhL,EAAYmJ,EAC5C,CACA,EAAEmB,GAAiB,IAAIlE,QAAWzG,OAAOC,kBACrC,OAAOrE,KAAKsE,UAChB,CAKA,GAAAmM,GACI,MAAMC,EAAO,GACPC,EAAQ,GACRrM,EAAWtE,KAAKsE,WAChBsM,EAAeC,IACV,CACHpU,KAAM,KACF,GAAqB,IAAjBoU,EAAMnK,OAAc,CACpB,MAAM9J,EAAS0H,EAAS7H,OACxBiU,EAAKtK,KAAKxJ,GACV+T,EAAMvK,KAAKxJ,EACf,CACA,OAAOiU,EAAMC,OAAO,IAIhC,MAAO,CACH,IAAI5B,IAAO,IAAM0B,EAAYF,IAAO1Q,KAAKyE,WAAYjH,EAAuBwC,KAAM+O,GAAgB,MAClG,IAAIG,IAAO,IAAM0B,EAAYD,IAAQ3Q,KAAKyE,WAAYjH,EAAuBwC,KAAM+O,GAAgB,MAE3G,CAMA,gBAAAgC,GACI,MAAMC,EAAOhR,KACb,IAAImE,EACJ,OAAOL,EAAmB,CACtB,WAAMS,GACFJ,EAAO6M,EAAK5M,OAAOC,gBACvB,EACA,UAAMG,CAAKyM,GACP,IACI,MAAM1U,MAAEA,EAAKM,KAAEA,SAAesH,EAAK1H,OACnC,GAAII,EACA,OAAOoU,EAAKvM,QAChB,MAAM6G,EAAQH,GAAW7L,KAAKC,UAAUjD,GAAS,MACjD0U,EAAKtM,QAAQ4G,EACjB,CACA,MAAO5M,GACHsS,EAAK7R,MAAMT,EACf,CACJ,EACA,YAAMiG,SACIT,EAAKU,WACf,GAER,EAsDJ,MAAM+K,GACF,WAAAjQ,GACIK,KAAKmQ,MAAQ,KACbnQ,KAAKE,KAAO,GACZF,KAAKkR,OAAS,EAClB,CACA,MAAAxF,CAAOmB,GAIH,GAHIA,EAAKsE,SAAS,QACdtE,EAAOA,EAAKuE,UAAU,EAAGvE,EAAKnG,OAAS,KAEtCmG,EAAM,CAEP,IAAK7M,KAAKmQ,QAAUnQ,KAAKE,KAAKwG,OAC1B,OAAO,KACX,MAAM8I,EAAM,CACRW,MAAOnQ,KAAKmQ,MACZjQ,KAAMF,KAAKE,KAAK4I,KAAK,MACrBuH,IAAKrQ,KAAKkR,QAKd,OAHAlR,KAAKmQ,MAAQ,KACbnQ,KAAKE,KAAO,GACZF,KAAKkR,OAAS,GACP1B,CACX,CAEA,GADAxP,KAAKkR,OAAO9K,KAAKyG,GACbA,EAAKqD,WAAW,KAChB,OAAO,KAEX,IAAKmB,EAAWC,EAAG/U,GAa3B,SAAmByL,EAAKJ,GACpB,MAAMwE,EAAQpE,EAAIuJ,QAAQ3J,GAC1B,IAAc,IAAVwE,EACA,MAAO,CAACpE,EAAIoJ,UAAU,EAAGhF,GAAQxE,EAAWI,EAAIoJ,UAAUhF,EAAQxE,EAAUlB,SAEhF,MAAO,CAACsB,EAAK,GAAI,GACrB,CAnBoCwJ,CAAU3E,EAAM,KAU5C,OATItQ,EAAM2T,WAAW,OACjB3T,EAAQA,EAAM6U,UAAU,IAEV,UAAdC,EACArR,KAAKmQ,MAAQ5T,EAEM,SAAd8U,GACLrR,KAAKE,KAAKkG,KAAK7J,GAEZ,IACX,EGnRGgT,eAAekC,GAAqB7D,EAAQ8D,GAC/C,MAAMtC,SAAEA,EAAQuC,aAAEA,EAAY9C,oBAAEA,EAAmB+C,UAAEA,GAAcF,EAC7DpM,OAAa,WACf,GAAIoM,EAAM3G,QAAQhG,OAId,OAHA8I,GAAUD,GAAQJ,MAAM,WAAY4B,EAASxP,OAAQwP,EAASyC,IAAKzC,EAASvP,QAASuP,EAAS9J,MAG1FoM,EAAM3G,QAAQ+G,cACPJ,EAAM3G,QAAQ+G,cAAc3C,gBAAgBC,EAAUsC,EAAMjN,WAAYmJ,GAE5EsB,GAAOC,gBAAgBC,EAAUsC,EAAMjN,WAAYmJ,GAG9D,GAAwB,MAApBwB,EAASxP,OACT,OAAO,KAEX,GAAI8R,EAAM3G,QAAQgH,iBACd,OAAO3C,EAEX,MAAM4C,EAAc5C,EAASvP,QAAQnC,IAAI,gBACnCuU,EAAYD,GAAaE,MAAM,KAAK,IAAIC,OAE9C,GADeF,GAAWlT,SAAS,qBAAuBkT,GAAWd,SAAS,SAClE,CAER,OAAOiB,SADYhD,EAASiD,OACFjD,EAC9B,CAEA,aADmBA,EAASkD,MAE/B,EA1BkB,GAkCnB,OAPAzE,GAAUD,GAAQJ,MAAM,IAAImE,qBAAiCpD,GAAqB,CAC9EM,sBACAgD,IAAKzC,EAASyC,IACdjS,OAAQwP,EAASxP,OACjB0F,OACAiN,WAAYpJ,KAAKqJ,MAAQZ,KAEtBtM,CACX,CACO,SAAS8M,GAAa7V,EAAO6S,GAChC,OAAK7S,GAA0B,iBAAVA,GAAsBoF,MAAMF,QAAQlF,GAC9CA,EAEJ2C,OAAOuT,eAAelW,EAAO,cAAe,CAC/CA,MAAO6S,EAASvP,QAAQnC,IAAI,gBAC5BgV,YAAY,GAEpB,CFzCO,MAAMC,WAAmBxW,QAC5B,WAAAwD,CAAYiO,EAAQgF,EAAiBC,EAAgBpB,IACjD3R,OAAO1D,IAIHA,EAAQ,KAAK,IAEjB4D,KAAK4S,gBAAkBA,EACvB5S,KAAK6S,cAAgBA,EACrB7D,GAAmBzR,IAAIyC,UAAM,GAC7BhD,EAAuBgD,KAAMgP,GAAoBpB,EACrD,CACA,WAAAkF,CAAYC,GACR,OAAO,IAAIJ,GAAWnV,EAAuBwC,KAAMgP,GAAoB,KAAMhP,KAAK4S,iBAAiBrD,MAAO3B,EAAQ8D,IAAUU,GAAaW,QAAgB/S,KAAK6S,cAAcjF,EAAQ8D,GAAQA,GAAQA,EAAMtC,WAC9M,CAYA,UAAA4D,GACI,OAAOhT,KAAK4S,gBAAgB9V,MAAMmW,GAAMA,EAAE7D,UAC9C,CAaA,kBAAM8D,GACF,MAAOhT,EAAMkP,SAAkBjT,QAAQgX,IAAI,CAACnT,KAAKoQ,QAASpQ,KAAKgT,eAC/D,MAAO,CAAE9S,OAAMkP,WAAUgE,WAAYhE,EAASvP,QAAQnC,IAAI,gBAC9D,CACA,KAAA0S,GAII,OAHKpQ,KAAKqT,gBACNrT,KAAKqT,cAAgBrT,KAAK4S,gBAAgB9V,MAAMoD,GAASF,KAAK6S,cAAcrV,EAAuBwC,KAAMgP,GAAoB,KAAM9O,MAEhIF,KAAKqT,aAChB,CACA,IAAAvW,CAAKwW,EAAaC,GACd,OAAOvT,KAAKoQ,QAAQtT,KAAKwW,EAAaC,EAC1C,CACA,MAAMA,GACF,OAAOvT,KAAKoQ,QAAQoD,MAAMD,EAC9B,CACA,QAAQE,GACJ,OAAOzT,KAAKoQ,QAAQsD,QAAQD,EAChC,EAEJzE,GAAqB,IAAInE,QC/DlB,MAAM8I,GACT,WAAAhU,CAAYiO,EAAQwB,EAAU9J,EAAMyF,GAChCkE,GAAqB1R,IAAIyC,UAAM,GAC/BhD,EAAuBgD,KAAMiP,GAAsBrB,GACnD5N,KAAK+K,QAAUA,EACf/K,KAAKoP,SAAWA,EAChBpP,KAAKsF,KAAOA,CAChB,CACA,WAAAsO,GAEI,QADc5T,KAAK6T,oBACRnN,QAE6B,MAAjC1G,KAAK8T,wBAChB,CACA,iBAAMC,GACF,MAAMC,EAAchU,KAAK8T,yBACzB,IAAKE,EACD,MAAM,IAAIvU,EAAY,yFAE1B,aAAajC,EAAuBwC,KAAMiP,GAAsB,KAAKgF,eAAejU,KAAKL,YAAaqU,EAC1G,CACA,eAAOE,GACH,IAAIC,EAAOnU,KAEX,UADMmU,EACCA,EAAKP,eACRO,QAAaA,EAAKJ,oBACZI,CAEd,CACA,QAASlF,GAAuB,IAAIpE,QAAWzG,OAAOC,kBAClD,UAAW,MAAM8P,KAAQnU,KAAKkU,YAC1B,IAAK,MAAME,KAAQD,EAAKN,0BACdO,CAGlB,EAWG,MAAMC,WAAoB1B,GAC7B,WAAAhT,CAAYiO,EAAQ0G,EAASC,GACzBzU,MAAM8N,EAAQ0G,GAAS/E,MAAO3B,EAAQ8D,IAAU,IAAI6C,EAAK3G,EAAQ8D,EAAMtC,eAAgBqC,GAAqB7D,EAAQ8D,GAAQA,EAAM3G,UACtI,CAQA,OAAQ3G,OAAOC,iBACX,MAAM8P,QAAanU,MACnB,UAAW,MAAMoU,KAAQD,QACfC,CAEd,EAKG,MAAMG,WAAaZ,GACtB,WAAAhU,CAAYiO,EAAQwB,EAAU9J,EAAMyF,GAChCjL,MAAM8N,EAAQwB,EAAU9J,EAAMyF,GAC9B/K,KAAKE,KAAOoF,EAAKpF,MAAQ,GACzBF,KAAKwJ,OAASlE,EAAKkE,MACvB,CACA,iBAAAqK,GACI,OAAO7T,KAAKE,MAAQ,EACxB,CACA,sBAAA4T,GACI,OAAO,IACX,EAEG,MAAMU,WAAmBb,GAC5B,WAAAhU,CAAYiO,EAAQwB,EAAU9J,EAAMyF,GAChCjL,MAAM8N,EAAQwB,EAAU9J,EAAMyF,GAC9B/K,KAAKE,KAAOoF,EAAKpF,MAAQ,GACzBF,KAAKyU,SAAWnP,EAAKmP,WAAY,CACrC,CACA,iBAAAZ,GACI,OAAO7T,KAAKE,MAAQ,EACxB,CACA,WAAA0T,GACI,OAAsB,IAAlB5T,KAAKyU,UAGF3U,MAAM8T,aACjB,CACA,sBAAAE,GACI,MAAM5T,EAAOF,KAAK6T,oBACZa,EAAKxU,EAAKA,EAAKwG,OAAS,IAAIgO,GAClC,OAAKA,EAGE,IACA1U,KAAK+K,QACR4J,MAAO,IACA9S,EAAS7B,KAAK+K,QAAQ4J,OACzBC,MAAOF,IANJ,IASf,EAEG,MAAMG,WAA+BlB,GACxC,WAAAhU,CAAYiO,EAAQwB,EAAU9J,EAAMyF,GAChCjL,MAAM8N,EAAQwB,EAAU9J,EAAMyF,GAC9B/K,KAAKE,KAAOoF,EAAKpF,MAAQ,GACzBF,KAAKyU,SAAWnP,EAAKmP,WAAY,EACjCzU,KAAK8U,QAAUxP,EAAKwP,SAAW,EACnC,CACA,iBAAAjB,GACI,OAAO7T,KAAKE,MAAQ,EACxB,CACA,WAAA0T,GACI,OAAsB,IAAlB5T,KAAKyU,UAGF3U,MAAM8T,aACjB,CACA,sBAAAE,GACI,MAAMiB,EAAS/U,KAAK8U,QACpB,OAAKC,EAGE,IACA/U,KAAK+K,QACR4J,MAAO,IACA9S,EAAS7B,KAAK+K,QAAQ4J,OACzBC,MAAOG,IANJ,IASf,EEhJG,MAAMC,GAAmB,KAC5B,GAAoB,oBAATC,KAAsB,CAC7B,MAAMvS,QAAEA,GAAY5E,WACdoX,EAA+C,iBAA5BxS,GAASyS,UAAUC,MAAqB7M,SAAS7F,EAAQyS,SAASC,KAAKlD,MAAM,MAAQ,GAC9G,MAAM,IAAIjT,MAAM,0EACXiW,EACG,6FACE,IACd,GAMG,SAASG,GAASC,EAAUC,EAAUxK,GAEzC,OADAiK,KACO,IAAIC,KAAKK,EAAUC,GAAY,eAAgBxK,EAC1D,CACO,SAASyK,GAAQjZ,GACpB,OAA2B,iBAAVA,GACH,OAAVA,IACE,SAAUA,GAASA,EAAMqC,MAAQC,OAAOtC,EAAMqC,OAC3C,QAASrC,GAASA,EAAMsV,KAAOhT,OAAOtC,EAAMsV,MAC5C,aAActV,GAASA,EAAMkZ,UAAY5W,OAAOtC,EAAMkZ,WACtD,SAAUlZ,GAASA,EAAMmZ,MAAQ7W,OAAOtC,EAAMmZ,QACnD,IACCxD,MAAM,SACNyD,YAASxU,CAClB,CACO,MAAMyU,GAAmBrZ,GAAmB,MAATA,GAAkC,iBAAVA,GAA6D,mBAAhCA,EAAM6H,OAAOC,eAU/FwR,GAA8BtG,MAAOzE,EAAMgL,KAC7C,IAAKhL,EAAMxF,WAAYyQ,GAAWjL,EAAKxF,KAAMwQ,KAElDE,GAAsC,IAAInL,QA+BzC,MAAMkL,GAAaxG,MAAOjK,EAAMwQ,KACnC,UAzBJ,SAA0BG,GACtB,MAAMH,EAA+B,mBAAhBG,EAA6BA,EAAcA,EAAYH,MACtEI,EAASF,GAAoBtY,IAAIoY,GACvC,GAAII,EACA,OAAOA,EACX,MAAMC,EAAU,WACZ,IACI,MAAMC,EAAiB,aAAcN,EACjCA,EAAMO,gBACGP,EAAM,WAAWnW,YACxBO,EAAO,IAAIoW,SACjB,OAAIpW,EAAKzB,mBAAsB,IAAI2X,EAAclW,GAAMoS,MAI3D,CACA,MAEI,OAAO,CACX,CACH,EAfe,GAiBhB,OADA0D,GAAoBzY,IAAIuY,EAAOK,GACxBA,CACX,CAEgBI,CAAiBT,GACzB,MAAM,IAAIxY,UAAU,qGAExB,MAAMkZ,EAAO,IAAIF,SAEjB,aADMna,QAAQgX,IAAIjU,OAAOyP,QAAQrJ,GAAQ,CAAA,GAAIsJ,KAAI,EAAEvL,EAAK9G,KAAWka,GAAaD,EAAMnT,EAAK9G,MACpFia,CAAI,EAqBTC,GAAelH,MAAOiH,EAAMnT,EAAK9G,KACnC,QAAc4E,IAAV5E,EAAJ,CAEA,GAAa,MAATA,EACA,MAAM,IAAIe,UAAU,sBAAsB+F,gEAG9C,GAAqB,iBAAV9G,GAAuC,iBAAVA,GAAuC,kBAAVA,EACjEia,EAAKE,OAAOrT,EAAKxE,OAAOtC,SAEvB,GAAIA,aAAiB8Z,SACtBG,EAAKE,OAAOrT,EAAKgS,GAAS,OAAO9Y,EAAMoa,QAASnB,GAAQjZ,UAEvD,GAAIqZ,GAAgBrZ,GACrBia,EAAKE,OAAOrT,EAAKgS,GAAS,OAAO,IAAIgB,SAASpS,EAAmB1H,IAAQoa,QAASnB,GAAQjZ,UAEzF,GAjCW,CAACA,GAAUA,aAAiBqa,MAAQ,SAAUra,EAiCrDsa,CAAYta,GACjBia,EAAKE,OAAOrT,EAAK9G,EAAOiZ,GAAQjZ,SAE/B,GAAIoF,MAAMF,QAAQlF,SACbJ,QAAQgX,IAAI5W,EAAMqS,KAAKkI,GAAUL,GAAaD,EAAMnT,EAAM,KAAMyT,UAErE,IAAqB,iBAAVva,EAIZ,MAAM,IAAIe,UAAU,wGAAwGf,mBAHtHJ,QAAQgX,IAAIjU,OAAOyP,QAAQpS,GAAOqS,KAAI,EAAEhQ,EAAMmY,KAAUN,GAAaD,EAAM,GAAGnT,KAAOzE,KAASmY,KAIxG,CAzBI,CAyBJ,EC3HEC,GAAcza,GAAmB,MAATA,GACT,iBAAVA,GACe,iBAAfA,EAAM0a,MACS,iBAAf1a,EAAM8D,MACS,mBAAf9D,EAAM+V,MACU,mBAAhB/V,EAAMiM,OACgB,mBAAtBjM,EAAM2a,YAgDjB3H,eAAe4H,GAAS5a,GACpB,IAAI6a,EAAQ,GACZ,GAAqB,iBAAV7a,GACPyP,YAAYqL,OAAO9a,IACnBA,aAAiByP,YACjBoL,EAAMhR,KAAK7J,QAEV,GAAIya,GAAWza,GAChB6a,EAAMhR,KAAK7J,aAAiBqa,KAAOra,QAAcA,EAAM2a,mBAEtD,KAAItB,GAAgBrZ,GAMpB,CACD,MAAMoD,EAAcpD,GAAOoD,aAAaf,KACxC,MAAM,IAAIK,MAAM,gCAAgC1C,IAAQoD,EAAc,kBAAkBA,IAAgB,KAIhH,SAAuBpD,GACnB,GAAqB,iBAAVA,GAAgC,OAAVA,EAC7B,MAAO,GACX,MAAMmV,EAAQxS,OAAOoY,oBAAoB/a,GACzC,MAAO,aAAamV,EAAM9C,KAAKqE,GAAM,IAAIA,OAAMnK,KAAK,QACxD,CATqHyO,CAAchb,KAC/H,CAPI,UAAW,MAAMuP,KAASvP,EACtB6a,EAAMhR,cAAe+Q,GAASrL,GAMtC,CACA,OAAOsL,CACX,CC/EO,MAAMI,GACT,WAAA7X,CAAYiO,GACR5N,KAAKyX,QAAU7J,CACnB,ECKG,SAAS8J,GAAc1P,GAC1B,OAAOA,EAAIzJ,QAAQ,mCAAoCoZ,mBAC3D,CACA,MAAMC,GAAwB1Y,OAAO2Y,OAAuB3Y,OAAO4Y,OAAO,OAC7DC,GAAwB,CAACC,EAAcN,KAAkB,SAAcO,KAAYC,GAE5F,GAAuB,IAAnBD,EAAQvR,OACR,OAAOuR,EAAQ,GACnB,IAAIE,GAAW,EACf,MAAMC,EAAkB,GAClB1C,EAAOuC,EAAQI,QAAO,CAACC,EAAeC,EAAcnM,KAClD,OAAOoM,KAAKD,KACZJ,GAAW,GAEf,MAAM5b,EAAQ2b,EAAO9L,GACrB,IAAIqM,GAAWN,EAAWR,mBAAqBK,GAAa,GAAKzb,GAiBjE,OAhBI6P,IAAU8L,EAAOxR,SACP,MAATnK,GACqB,iBAAVA,GAEJA,EAAMkC,WACFS,OAAOwZ,eAAexZ,OAAOwZ,eAAenc,EAAMyJ,gBAAkB4R,KAAUA,KACxEnZ,YAClBga,EAAUlc,EAAQ,GAClB6b,EAAgBhS,KAAK,CACjB7B,MAAO+T,EAAc5R,OAAS6R,EAAa7R,OAC3CA,OAAQ+R,EAAQ/R,OAChBtH,MAAO,iBAAiBF,OAAOC,UAAUV,SACpChB,KAAKlB,GACLiM,MAAM,yCAGZ8P,EAAgBC,GAAgBnM,IAAU8L,EAAOxR,OAAS,GAAK+R,EAAQ,GAC/E,IACGE,EAAWjD,EAAKxD,MAAM,OAAQ,GAAG,GACjC0G,EAAwB,qCAC9B,IAAIrV,EAEJ,KAA0D,QAAlDA,EAAQqV,EAAsBpV,KAAKmV,KACvCP,EAAgBhS,KAAK,CACjB7B,MAAOhB,EAAM6I,MACb1F,OAAQnD,EAAM,GAAGmD,OACjBtH,MAAO,UAAUmE,EAAM,mDAI/B,GADA6U,EAAgBxO,MAAK,CAACiP,EAAGC,IAAMD,EAAEtU,MAAQuU,EAAEvU,QACvC6T,EAAgB1R,OAAS,EAAG,CAC5B,IAAIqS,EAAU,EACd,MAAMC,EAAYZ,EAAgBC,QAAO,CAACY,EAAKtQ,KAC3C,MAAMuQ,EAAS,IAAIlS,OAAO2B,EAAQpE,MAAQwU,GACpCI,EAAS,IAAInS,OAAO2B,EAAQjC,QAElC,OADAqS,EAAUpQ,EAAQpE,MAAQoE,EAAQjC,OAC3BuS,EAAMC,EAASC,CAAM,GAC7B,IACH,MAAM,IAAI1Z,EAAY,0DAA0D2Y,EAC3ExJ,KAAKlS,GAAMA,EAAE0C,QACb0J,KAAK,UAAU4M,MAASsD,IACjC,CACA,OAAOtD,CACX,EAIaA,GAAuBqC,GAAsBL,WCpEnD,cAAuBF,GAe1B,IAAA4B,CAAKC,EAAc1E,EAAQ,CAAA,EAAI5J,GAC3B,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,qBAAqB2D,aAAuB,GAAgB,CAAE1E,WAAU5J,GAChH,GCpBG,SAASwO,GAA6BC,GACzC,YAAgBrY,IAATqY,GAAsB,aAAcA,QAA0BrY,IAAlBqY,EAAKC,QAC5D,CA6BO,SAASC,GAA6BC,GACzC,MAAuC,mCAAhCA,GAA0B,MACrC,CAmBO,SAASC,GAAmBJ,GAC/B,MAA4B,wBAArBA,GAAe,MAC1B,CAwBO,SAASK,GAAoBC,EAAY5B,GAC5C,MAAM6B,EAAUD,EAAWC,QAAQnL,KAAKoL,IACpC,GAA6B,WAAzBA,EAAOC,cACP,MAAM,IAAI5Y,EAEd,GAA6B,mBAAzB2Y,EAAOC,cACP,MAAM,IAAI3Y,EAGd,OADA4Y,GAAkDF,EAAOlb,QAAQqb,YAC1D,IACAH,EACHlb,QAAS,IACFkb,EAAOlb,WACNkb,EAAOlb,QAAQqb,WACf,CACIA,WAAYH,EAAOlb,QAAQqb,YAAYvL,KAAKwL,GAwBpE,SAAuBlC,EAAQkC,GAC3B,MAAMC,EAAYnC,EAAOoC,OAAOC,MAAMF,GAAcd,GAA6Bc,IAAcA,EAAUZ,UAAU7a,OAASwb,EAASX,SAAS7a,OAC9I,MAAO,IACAwb,EACHX,SAAU,IACHW,EAASX,SACZe,iBAAkBZ,GAAmBS,GAAaA,EAAUI,UAAUL,EAASX,SAASiB,WAClFL,GAAWZ,SAASkB,OAASpb,KAAK6Q,MAAMgK,EAASX,SAASiB,WACtD,MAGtB,CAnCiFE,CAAc1C,EAAQkC,WAAcjZ,QAE/FA,EACN0Z,OAAQb,EAAOlb,QAAQgc,UAAYd,EAAOlb,QAAQic,QAC9CC,GAAoB9C,EAAQ8B,EAAOlb,QAAQgc,SACzC,MAEb,IAEL,MAAO,IAAKhB,EAAYC,UAC5B,CACA,SAASiB,GAAoB9C,EAAQ4C,GACjC,GAAqC,gBAAjC5C,EAAOyB,iBAAiBtZ,KACxB,OAAO,KAEX,GAAqC,gBAAjC6X,EAAOyB,iBAAiBtZ,KAAwB,CAChD,GAAI,cAAe6X,EAAOyB,gBAAiB,CAEvC,OADwBzB,EAAOyB,gBACRc,UAAUK,EACrC,CACA,OAAOvb,KAAK6Q,MAAM0K,EACtB,CACA,OAAO,IACX,CAaO,SAASG,GAAoB/C,EAAQkC,GACxC,IAAKlC,KAAY,UAAWA,KAAYA,EAAOoC,MAC3C,OAAO,EAEX,MAAMD,EAAYnC,EAAOoC,OAAOC,MAAMF,GAAcd,GAA6Bc,IAAcA,EAAUZ,UAAU7a,OAASwb,EAASX,SAAS7a,OAC9I,OAAQ2a,GAA6Bc,KAChCT,GAAmBS,IAAcA,GAAWZ,SAASkB,SAAU,EACxE,CACO,SAASO,GAAsBhD,GAClC,QAAIwB,GAA6BxB,EAAOyB,mBAGhCzB,EAAOoC,OAAOa,MAAMC,GAAMxB,GAAmBwB,IAAkB,aAAXA,EAAE/a,OAA6C,IAAtB+a,EAAE3B,SAASkB,WAAqB,EACzH,CACO,SAAST,GAAkDmB,GAC9D,IAAK,MAAMjB,KAAYiB,GAAa,GAChC,GAAsB,aAAlBjB,EAAS/Z,KACT,MAAM,IAAIZ,EAAY,oEAAoE2a,EAAS/Z,SAG/G,CCtJO,MAAMib,GAAsBxc,GACN,cAAlBA,GAASyc,KAEPC,GAAiB1c,GACD,SAAlBA,GAASyc,KCJpB,IAAIE,GAAwBC,GAA+BC,GAAsCC,GAAqCC,GAAyBC,GAAgCC,GAA+BC,GAAwBC,GAAoBC,GAAsBC,GAAsBC,GAAqCC,GCAvVC,GAAyCC,GAA+CC,GAA+CC,GAAwDC,GAA8DC,GAAmDC,GAA8CC,GDG3V,MAAMC,GACT,WAAAnd,GACI8b,GAAuBsB,IAAI/c,MAC3BA,KAAKyE,WAAa,IAAIuY,gBACtBtB,GAA8Bne,IAAIyC,UAAM,GACxC2b,GAAqCpe,IAAIyC,MAAM,SAC/C4b,GAAoCre,IAAIyC,MAAM,SAC9C6b,GAAwBte,IAAIyC,UAAM,GAClC8b,GAA+Bve,IAAIyC,MAAM,SACzC+b,GAA8Bxe,IAAIyC,MAAM,SACxCgc,GAAuBze,IAAIyC,KAAM,IACjCic,GAAmB1e,IAAIyC,MAAM,GAC7Bkc,GAAqB3e,IAAIyC,MAAM,GAC/Bmc,GAAqB5e,IAAIyC,MAAM,GAC/Boc,GAAoC7e,IAAIyC,MAAM,GAC9ChD,EAAuBgD,KAAM0b,GAA+B,IAAIvf,SAAQ,CAACC,EAASC,KAC9EW,EAAuBgD,KAAM2b,GAAsCvf,GACnEY,EAAuBgD,KAAM4b,GAAqCvf,EAAY,KAElFW,EAAuBgD,KAAM6b,GAAyB,IAAI1f,SAAQ,CAACC,EAASC,KACxEW,EAAuBgD,KAAM8b,GAAgC1f,GAC7DY,EAAuBgD,KAAM+b,GAA+B1f,EAAY,KAM5EmB,EAAuBwC,KAAM0b,GAA+B,KAAKlI,OAAM,SACvEhW,EAAuBwC,KAAM6b,GAAyB,KAAKrI,OAAM,QACrE,CACA,IAAAyJ,CAAKC,GAGD/a,YAAW,KACP+a,IAAWpgB,MAAK,KACZkD,KAAKmd,aACLnd,KAAKod,MAAM,MAAM,GAClB5f,EAAuBwC,KAAMyb,GAAwB,IAAKY,IAA0Bre,KAAKgC,MAAM,GACnG,EACP,CACA,UAAAqd,GACQrd,KAAKsd,QAET9f,EAAuBwC,KAAM2b,GAAsC,KAAKle,KAAKuC,MAC7EA,KAAKod,MAAM,WACf,CACA,SAAIE,GACA,OAAO9f,EAAuBwC,KAAMic,GAAoB,IAC5D,CACA,WAAIsB,GACA,OAAO/f,EAAuBwC,KAAMkc,GAAsB,IAC9D,CACA,WAAIsB,GACA,OAAOhgB,EAAuBwC,KAAMmc,GAAsB,IAC9D,CACA,KAAA1M,GACIzP,KAAKyE,WAAWgL,OACpB,CAQA,EAAAgO,CAAGtN,EAAOuN,GAGN,OAFkBlgB,EAAuBwC,KAAMgc,GAAwB,KAAK7L,KAAW3S,EAAuBwC,KAAMgc,GAAwB,KAAK7L,GAAS,KAChJ/J,KAAK,CAAEsX,aACV1d,IACX,CAQA,GAAAqN,CAAI8C,EAAOuN,GACP,MAAMC,EAAYngB,EAAuBwC,KAAMgc,GAAwB,KAAK7L,GAC5E,IAAKwN,EACD,OAAO3d,KACX,MAAMoM,EAAQuR,EAAUC,WAAWC,GAAMA,EAAEH,WAAaA,IAGxD,OAFItR,GAAS,GACTuR,EAAUG,OAAO1R,EAAO,GACrBpM,IACX,CAMA,IAAA+d,CAAK5N,EAAOuN,GAGR,OAFkBlgB,EAAuBwC,KAAMgc,GAAwB,KAAK7L,KAAW3S,EAAuBwC,KAAMgc,GAAwB,KAAK7L,GAAS,KAChJ/J,KAAK,CAAEsX,WAAUK,MAAM,IAC1B/d,IACX,CAYA,OAAAge,CAAQ7N,GACJ,OAAO,IAAIhU,SAAQ,CAACC,EAASC,KACzBW,EAAuBgD,KAAMoc,IAAqC,GACpD,UAAVjM,GACAnQ,KAAK+d,KAAK,QAAS1hB,GACvB2D,KAAK+d,KAAK5N,EAAO/T,EAAQ,GAEjC,CACA,UAAMS,GACFG,EAAuBgD,KAAMoc,IAAqC,SAC5D5e,EAAuBwC,KAAM6b,GAAyB,IAChE,CACA,KAAAuB,CAAMjN,KAAUpM,GAEZ,GAAIvG,EAAuBwC,KAAMic,GAAoB,KACjD,OAEU,QAAV9L,IACAnT,EAAuBgD,KAAMic,IAAoB,GACjDze,EAAuBwC,KAAM8b,GAAgC,KAAKre,KAAKuC,OAE3E,MAAM2d,EAAYngB,EAAuBwC,KAAMgc,GAAwB,KAAK7L,GAK5E,GAJIwN,IACAngB,EAAuBwC,KAAMgc,GAAwB,KAAK7L,GAASwN,EAAUhU,QAAQkU,IAAOA,EAAEE,OAC9FJ,EAAUM,SAAQ,EAAGP,cAAeA,KAAY3Z,MAEtC,UAAVoM,EAAmB,CACnB,MAAM/Q,EAAQ2E,EAAK,GAOnB,OANKvG,EAAuBwC,KAAMoc,GAAqC,MAASuB,GAAWjX,QACvFvK,QAAQE,OAAO+C,GAEnB5B,EAAuBwC,KAAM4b,GAAqC,KAAKne,KAAKuC,KAAMZ,GAClF5B,EAAuBwC,KAAM+b,GAA+B,KAAKte,KAAKuC,KAAMZ,QAC5EY,KAAKod,MAAM,MAEf,CACA,GAAc,UAAVjN,EAAmB,CAEnB,MAAM/Q,EAAQ2E,EAAK,GACdvG,EAAuBwC,KAAMoc,GAAqC,MAASuB,GAAWjX,QAOvFvK,QAAQE,OAAO+C,GAEnB5B,EAAuBwC,KAAM4b,GAAqC,KAAKne,KAAKuC,KAAMZ,GAClF5B,EAAuBwC,KAAM+b,GAA+B,KAAKte,KAAKuC,KAAMZ,GAC5EY,KAAKod,MAAM,MACf,CACJ,CACA,UAAAD,GAAe,EEnKZ,SAASe,GAA4B1X,GACxC,MAA2B,mBAAbA,EAAG4J,KACrB,CFmKAsL,GAAgC,IAAI7Q,QAAW8Q,GAAuC,IAAI9Q,QAAW+Q,GAAsC,IAAI/Q,QAAWgR,GAA0B,IAAIhR,QAAWiR,GAAiC,IAAIjR,QAAWkR,GAAgC,IAAIlR,QAAWmR,GAAyB,IAAInR,QAAWoR,GAAqB,IAAIpR,QAAWqR,GAAuB,IAAIrR,QAAWsR,GAAuB,IAAItR,QAAWuR,GAAsC,IAAIvR,QAAW4Q,GAAyB,IAAI0C,QAAW9B,GAA2B,SAAkCjd,GAKhlB,GAJApC,EAAuBgD,KAAMkc,IAAsB,GAC/C9c,aAAiBH,OAAwB,eAAfG,EAAMR,OAChCQ,EAAQ,IAAI8B,GAEZ9B,aAAiB8B,EAEjB,OADAlE,EAAuBgD,KAAMmc,IAAsB,GAC5Cnc,KAAKod,MAAM,QAAShe,GAE/B,GAAIA,aAAiBK,EACjB,OAAOO,KAAKod,MAAM,QAAShe,GAE/B,GAAIA,aAAiBH,MAAO,CACxB,MAAMmf,EAAc,IAAI3e,EAAYL,EAAMN,SAG1C,OADAsf,EAAY/e,MAAQD,EACbY,KAAKod,MAAM,QAASgB,EAC/B,CACA,OAAOpe,KAAKod,MAAM,QAAS,IAAI3d,EAAYZ,OAAOO,IACtD,ECjLA,MAAMif,GAA+B,GAC9B,MAAMC,WAAqCxB,GAC9C,WAAAnd,GACIG,SAAS4a,WACT4B,GAAwCS,IAAI/c,MAC5CA,KAAKue,iBAAmB,GACxBve,KAAKwe,SAAW,EACpB,CACA,kBAAAC,CAAmBC,GACf1e,KAAKue,iBAAiBnY,KAAKsY,GAC3B1e,KAAKod,MAAM,iBAAkBsB,GAC7B,MAAM5f,EAAU4f,EAAe3E,QAAQ,IAAIjb,QAG3C,OAFIA,GACAkB,KAAK2e,YAAY7f,GACd4f,CACX,CACA,WAAAC,CAAY7f,EAAS8f,GAAO,GAIxB,GAHM,YAAa9f,IACfA,EAAQgc,QAAU,MACtB9a,KAAKwe,SAASpY,KAAKtH,GACf8f,EAEA,GADA5e,KAAKod,MAAM,UAAWte,GAClB0c,GAAc1c,IAAYA,EAAQgc,QAElC9a,KAAKod,MAAM,yBAA0Bte,EAAQgc,cAE5C,GAAIQ,GAAmBxc,IAAYA,EAAQqb,WAC5C,IAAK,MAAM0E,KAAa/f,EAAQqb,WACL,aAAnB0E,EAAUxe,MACVL,KAAKod,MAAM,mBAAoByB,EAAUpF,SAK7D,CAKA,yBAAMqF,SACI9e,KAAKnD,OACX,MAAMid,EAAa9Z,KAAKue,iBAAiBve,KAAKue,iBAAiB7X,OAAS,GACxE,IAAKoT,EACD,MAAM,IAAIra,EAAY,mDAC1B,OAAOqa,CACX,CAKA,kBAAMiF,GAEF,aADM/e,KAAKnD,OACJW,EAAuBwC,KAAMsc,GAAyC,IAAKC,IAA+C9e,KAAKuC,KAC1I,CAKA,kBAAMgf,GAEF,aADMhf,KAAKnD,OACJW,EAAuBwC,KAAMsc,GAAyC,IAAKE,IAA+C/e,KAAKuC,KAC1I,CAKA,2BAAMif,GAEF,aADMjf,KAAKnD,OACJW,EAAuBwC,KAAMsc,GAAyC,IAAKG,IAAwDhf,KAAKuC,KACnJ,CACA,iCAAMkf,GAEF,aADMlf,KAAKnD,OACJW,EAAuBwC,KAAMsc,GAAyC,IAAKI,IAA8Djf,KAAKuC,KACzJ,CACA,gBAAMmf,GAEF,aADMnf,KAAKnD,OACJW,EAAuBwC,KAAMsc,GAAyC,IAAKK,IAAmDlf,KAAKuC,KAC9I,CACA,kBAAAof,GACI,MAAO,IAAIpf,KAAKue,iBACpB,CACA,UAAApB,GACI,MAAMrD,EAAa9Z,KAAKue,iBAAiBve,KAAKue,iBAAiB7X,OAAS,GACpEoT,GACA9Z,KAAKod,MAAM,sBAAuBtD,GACtC,MAAMkF,EAAexhB,EAAuBwC,KAAMsc,GAAyC,IAAKE,IAA+C/e,KAAKuC,MAChJgf,GACAhf,KAAKod,MAAM,eAAgB4B,GAC/B,MAAMD,EAAevhB,EAAuBwC,KAAMsc,GAAyC,IAAKC,IAA+C9e,KAAKuC,MAChJ+e,GACA/e,KAAKod,MAAM,eAAgB2B,GAC/B,MAAMM,EAAoB7hB,EAAuBwC,KAAMsc,GAAyC,IAAKG,IAAwDhf,KAAKuC,MAC9Jqf,GACArf,KAAKod,MAAM,wBAAyBiC,GACxC,MAAMC,EAA0B9hB,EAAuBwC,KAAMsc,GAAyC,IAAKI,IAA8Djf,KAAKuC,MAC/I,MAA3Bsf,GACAtf,KAAKod,MAAM,8BAA+BkC,GAC1Ctf,KAAKue,iBAAiBpD,MAAM3c,GAAMA,EAAE+gB,SACpCvf,KAAKod,MAAM,aAAc5f,EAAuBwC,KAAMsc,GAAyC,IAAKK,IAAmDlf,KAAKuC,MAEpK,CACA,2BAAMwf,CAAsB5R,EAAQsK,EAAQnN,GACxC,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3DjS,EAAuBwC,KAAMsc,GAAyC,IAAKM,IAA8Cnf,KAAKuC,KAAMkY,GACpI,MAAMwG,QAAuB9Q,EAAO+R,KAAKC,YAAY9H,OAAO,IAAKI,EAAQnT,QAAQ,GAAS,IAAKgG,EAAS0U,OAAQzf,KAAKyE,WAAWgb,SAEhI,OADAzf,KAAKqd,aACErd,KAAKye,mBAAmB5E,GAAoB6E,EAAgBxG,GACvE,CACA,wBAAM2H,CAAmBjS,EAAQsK,EAAQnN,GACrC,IAAK,MAAMjM,KAAWoZ,EAAOsG,SACzBxe,KAAK2e,YAAY7f,GAAS,GAE9B,aAAakB,KAAKwf,sBAAsB5R,EAAQsK,EAAQnN,EAC5D,CACA,eAAM+U,CAAUlS,EAAQsK,EAAQnN,GAC5B,MAAMwQ,EAAO,QACPwE,YAAEA,EAAc,OAAMhb,OAAEA,KAAWib,GAAe9H,EAClD+H,EAA8C,iBAAhBF,GAAiD,aAArBA,EAAY1f,MAAuB0f,GAAatG,UAAU7a,MACpHshB,mBAAEA,EAAqB7B,IAAiCtT,GAAW,CAAA,EAEnEoV,EAAajI,EAAOoC,MAAM1L,KAAK4K,IACjC,GAAII,GAAmBJ,GAAO,CAC1B,IAAKA,EAAK4G,UACN,MAAM,IAAI3gB,EAAY,yEAE1B,MAAO,CACHY,KAAM,WACNoZ,SAAU,CACNA,SAAUD,EAAK4G,UACfxhB,KAAM4a,EAAKC,SAAS7a,KACpByhB,YAAa7G,EAAKC,SAAS4G,aAAe,GAC1CC,WAAY9G,EAAKC,SAAS6G,WAC1BlQ,MAAOoJ,EAAKiB,UACZE,QAAQ,GAGpB,CACA,OAAOnB,CAAI,IAET+G,EAAkB,CAAA,EACxB,IAAK,MAAMnjB,KAAK+iB,EACG,aAAX/iB,EAAEiD,OACFkgB,EAAgBnjB,EAAEqc,SAAS7a,MAAQxB,EAAEqc,SAASA,SAAS7a,MAAQxB,EAAEqc,UAGzE,MAAMa,EAAQ,UAAWpC,EACrBiI,EAAWvR,KAAKwM,GAAiB,aAAXA,EAAE/a,KACpB,CACIA,KAAM,WACNoZ,SAAU,CACN7a,KAAMwc,EAAE3B,SAAS7a,MAAQwc,EAAE3B,SAASA,SAAS7a,KAC7C0hB,WAAYlF,EAAE3B,SAAS6G,WACvBD,YAAajF,EAAE3B,SAAS4G,YACxB1F,OAAQS,EAAE3B,SAASkB,SAGzBS,SACJja,EACN,IAAK,MAAMrC,KAAWoZ,EAAOsG,SACzBxe,KAAK2e,YAAY7f,GAAS,GAE9B,IAAK,IAAIqH,EAAI,EAAGA,EAAI+Z,IAAsB/Z,EAAG,CACzC,MAAMuY,QAAuB1e,KAAKwf,sBAAsB5R,EAAQ,IACzDoS,EACHD,cACAzF,QACAkE,SAAU,IAAIxe,KAAKwe,WACpBzT,GACGjM,EAAU4f,EAAe3E,QAAQ,IAAIjb,QAC3C,IAAKA,EACD,MAAM,IAAIW,EAAY,8CAE1B,IAAKX,EAAQqb,YAAYzT,OACrB,OAEJ,IAAK,MAAMmY,KAAa/f,EAAQqb,WAAY,CACxC,GAAuB,aAAnB0E,EAAUxe,KACV,SACJ,MAAMmgB,EAAe3B,EAAUnK,IACzB9V,KAAEA,EAAM8b,UAAW3W,GAAS8a,EAAUpF,SACtCjT,EAAK+Z,EAAgB3hB,GAC3B,IAAK4H,EAAI,CACL,MAAMsU,EAAU,sBAAsBvb,KAAKC,UAAUZ,8BAAiCM,OAAOqL,KAAKgW,GAC7F3R,KAAKhQ,GAASW,KAAKC,UAAUZ,KAC7BkK,KAAK,0BACV9I,KAAK2e,YAAY,CAAEpD,OAAMiF,eAAc1F,YACvC,QACJ,CACK,GAAImF,GAAwBA,IAAyBrhB,EAAM,CAC5D,MAAMkc,EAAU,sBAAsBvb,KAAKC,UAAUZ,OAAUW,KAAKC,UAAUygB,iCAC9EjgB,KAAK2e,YAAY,CAAEpD,OAAMiF,eAAc1F,YACvC,QACJ,CACA,IAAID,EACJ,IACIA,EAASqD,GAA4B1X,SAAYA,EAAG4J,MAAMrM,GAAQA,CACtE,CACA,MAAO3E,GACH,MAAM0b,EAAU1b,aAAiBH,MAAQG,EAAMN,QAAUD,OAAOO,GAChEY,KAAK2e,YAAY,CAAEpD,OAAMiF,eAAc1F,YACvC,QACJ,CAEA,MAAM2F,QAAmBja,EAAGiT,SAASoB,EAAQ7a,MACvC8a,EAAUtd,EAAuBwC,KAAMsc,GAAyC,IAAKO,IAA2Dpf,KAAKuC,KAAMygB,GAEjK,GADAzgB,KAAK2e,YAAY,CAAEpD,OAAMiF,eAAc1F,YACnCmF,EACA,MAER,CACJ,CAEJ,EAEJ3D,GAA0C,IAAI6B,QAAW5B,GAAgD,WACrG,OAAO/e,EAAuBwC,KAAMsc,GAAyC,IAAKE,IAA+C/e,KAAKuC,MAAM8a,SAAW,IAC3J,EAAG0B,GAAgD,WAC/C,IAAIrW,EAAInG,KAAKwe,SAAS9X,OACtB,KAAOP,KAAM,GAAG,CACZ,MAAMrH,EAAUkB,KAAKwe,SAASrY,GAC9B,GAAImV,GAAmBxc,GAAU,CAO7B,MALY,IACLA,EACHgc,QAAShc,EAAQgc,SAAW,KAC5BC,QAASjc,EAAQic,SAAW,KAGpC,CACJ,CACA,MAAM,IAAItb,EAAY,6EAC1B,EAAGgd,GAAyD,WACxD,IAAK,IAAItW,EAAInG,KAAKwe,SAAS9X,OAAS,EAAGP,GAAK,EAAGA,IAAK,CAChD,MAAMrH,EAAUkB,KAAKwe,SAASrY,GAC9B,GAAImV,GAAmBxc,IAAYA,GAASqb,YAAYzT,OACpD,OAAO5H,EAAQqb,WAAWxQ,QAAQ7H,GAAiB,aAAXA,EAAEzB,OAAqBqgB,IAAG,IAAKjH,QAE/E,CAEJ,EAAGiD,GAA+D,WAC9D,IAAK,IAAIvW,EAAInG,KAAKwe,SAAS9X,OAAS,EAAGP,GAAK,EAAGA,IAAK,CAChD,MAAMrH,EAAUkB,KAAKwe,SAASrY,GAC9B,GAAIqV,GAAc1c,IACK,MAAnBA,EAAQgc,SACmB,iBAApBhc,EAAQgc,SACf9a,KAAKwe,SAASrD,MAAMrZ,GAAiB,cAAXA,EAAEyZ,MACxBzZ,EAAEqY,YAAYgB,MAAMwF,GAAiB,aAAXA,EAAEtgB,MAAuBsgB,EAAEjM,KAAO5V,EAAQ0hB,iBACxE,OAAO1hB,EAAQgc,OAEvB,CAEJ,EAAG6B,GAAoD,WACnD,MAAMiE,EAAQ,CACVC,kBAAmB,EACnBC,cAAe,EACfC,aAAc,GAElB,IAAK,MAAMxB,MAAEA,KAAWvf,KAAKue,iBACrBgB,IACAqB,EAAMC,mBAAqBtB,EAAMsB,kBACjCD,EAAME,eAAiBvB,EAAMuB,cAC7BF,EAAMG,cAAgBxB,EAAMwB,cAGpC,OAAOH,CACX,EAAGhE,GAA+C,SAAsD1E,GACpG,GAAgB,MAAZA,EAAO8I,GAAa9I,EAAO8I,EAAI,EAC/B,MAAM,IAAIvhB,EAAY,+HAE9B,EAAGod,GAA4D,SAAmE4D,GAC9H,MAA8B,iBAAfA,EAA0BA,OACpBtf,IAAfsf,EAA2B,YACvBlhB,KAAKC,UAAUihB,EAC7B,EE3RO,MAAMQ,WAA6B3C,GACtC,eAAO4C,CAAStT,EAAQsK,EAAQnN,GAC5B,MAAMoW,EAAS,IAAIF,GACbnW,EAAO,IACNC,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,aAGjE,OADAshB,EAAOlE,MAAK,IAAMkE,EAAOrB,UAAUlS,EAAQsK,EAAQpN,KAC5CqW,CACX,CACA,WAAAxC,CAAY7f,EAAS8f,GAAO,GACxB9e,MAAM6e,YAAY7f,EAAS8f,GACvBtD,GAAmBxc,IAAYA,EAAQgc,SACvC9a,KAAKod,MAAM,UAAWte,EAAQgc,QAEtC,ECjBJ,MAcMsG,GAdM,EAcNA,GAbM,EAaNA,GAZM,EAYNA,GAXM,EAWNA,GAVO,GAUPA,GATO,GASPA,GARM,GAQNA,GAPW,IAOXA,GANiB,IAMjBA,GADMC,IAkBZ,MAAMC,WAAoBriB,OAE1B,MAAMsiB,WAAsBtiB,OAmB5B,MAAMuiB,GAAa,CAACC,EAAYC,KAC5B,MAAMhb,EAAS+a,EAAW/a,OAC1B,IAAI0F,EAAQ,EACZ,MAAMuV,EAAmBrhB,IACrB,MAAM,IAAIghB,GAAY,GAAGhhB,iBAAmB8L,IAAQ,EAElDwV,EAAuBthB,IACzB,MAAM,IAAIihB,GAAc,GAAGjhB,iBAAmB8L,IAAQ,EAEpDyV,EAAW,KACbC,IACI1V,GAAS1F,GACTib,EAAgB,2BACM,MAAtBF,EAAWrV,GACJ2V,IACe,MAAtBN,EAAWrV,GACJ4V,IACe,MAAtBP,EAAWrV,GACJ6V,IACoC,SAA3CR,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAaM,GAAShb,EAAS0F,EAAQ,GAAK,OAAO8D,WAAWuR,EAAWrQ,UAAUhF,KACpFA,GAAS,EACF,MAEoC,SAA3CqV,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAaM,GAAShb,EAAS0F,EAAQ,GAAK,OAAO8D,WAAWuR,EAAWrQ,UAAUhF,KACpFA,GAAS,GACF,GAEoC,UAA3CqV,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAaM,GAAShb,EAAS0F,EAAQ,GAAK,QAAQ8D,WAAWuR,EAAWrQ,UAAUhF,KACrFA,GAAS,GACF,GAEoC,aAA3CqV,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAiBM,GAAShb,EAAS0F,EAAQ,GAAK,WAAW8D,WAAWuR,EAAWrQ,UAAUhF,KAC5FA,GAAS,EACF8V,KAEoC,cAA3CT,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAuBM,GACpB,EAAIhb,EAAS0F,GACb1F,EAAS0F,EAAQ,GACjB,YAAY8D,WAAWuR,EAAWrQ,UAAUhF,KAChDA,GAAS,GACD8V,KAEmC,QAA3CT,EAAWrQ,UAAUhF,EAAOA,EAAQ,IACnCgV,GAAYM,GAAShb,EAAS0F,EAAQ,GAAK,MAAM8D,WAAWuR,EAAWrQ,UAAUhF,KAClFA,GAAS,EACF+V,KAEJC,KAELL,EAAW,KACb,MAAMxd,EAAQ6H,EACd,IAAI/D,GAAS,EAEb,IADA+D,IACOA,EAAQ1F,IAAiC,MAAtB+a,EAAWrV,IAAmB/D,GAAoC,OAA1BoZ,EAAWrV,EAAQ,KACjF/D,EAA+B,OAAtBoZ,EAAWrV,KAAmB/D,EACvC+D,IAEJ,GAAgC,KAA5BqV,EAAW5Y,OAAOuD,GAClB,IACI,OAAO7M,KAAK6Q,MAAMqR,EAAWrQ,UAAU7M,IAAS6H,EAAQiW,OAAOha,IACnE,CACA,MAAO3L,GACHklB,EAAoB/iB,OAAOnC,GAC/B,MAEC,GAAI0kB,GAAYM,EACjB,IACI,OAAOniB,KAAK6Q,MAAMqR,EAAWrQ,UAAU7M,EAAO6H,EAAQiW,OAAOha,IAAW,IAC5E,CACA,MAAO3L,GAEH,OAAO6C,KAAK6Q,MAAMqR,EAAWrQ,UAAU7M,EAAOkd,EAAWa,YAAY,OAAS,IAClF,CAEJX,EAAgB,8BAA8B,EAE5CK,EAAW,KACb5V,IACA0V,IACA,MAAM9f,EAAM,CAAA,EACZ,IACI,KAA6B,MAAtByf,EAAWrV,IAAgB,CAE9B,GADA0V,IACI1V,GAAS1F,GAAU0a,GAAYM,EAC/B,OAAO1f,EACX,MAAMqB,EAAM0e,IACZD,IACA1V,IACA,IACI,MAAM7P,EAAQslB,IACd3iB,OAAOuT,eAAezQ,EAAKqB,EAAK,CAAE9G,QAAOgmB,UAAU,EAAM7P,YAAY,EAAM8P,cAAc,GAC7F,CACA,MAAO9lB,GACH,GAAI0kB,GAAYM,EACZ,OAAO1f,EAEP,MAAMtF,CACd,CACAolB,IAC0B,MAAtBL,EAAWrV,IACXA,GACR,CACJ,CACA,MAAO1P,GACH,GAAI0kB,GAAYM,EACZ,OAAO1f,EAEP2f,EAAgB,gCACxB,CAEA,OADAvV,IACOpK,CAAG,EAERigB,EAAW,KACb7V,IACA,MAAMlF,EAAM,GACZ,IACI,KAA6B,MAAtBua,EAAWrV,IACdlF,EAAId,KAAKyb,KACTC,IAC0B,MAAtBL,EAAWrV,IACXA,GAGZ,CACA,MAAO1P,GACH,GAAI0kB,GAAYM,EACZ,OAAOxa,EAEXya,EAAgB,+BACpB,CAEA,OADAvV,IACOlF,CAAG,EAERkb,EAAW,KACb,GAAc,IAAVhW,EAAa,CACM,MAAfqV,GAAsBL,GAAYM,GAClCC,EAAgB,wBACpB,IACI,OAAOpiB,KAAK6Q,MAAMqR,EACtB,CACA,MAAO/kB,GACH,GAAI0kB,GAAYM,EACZ,IACI,MAAI,MAAQD,EAAWA,EAAW/a,OAAS,GAChCnH,KAAK6Q,MAAMqR,EAAWrQ,UAAU,EAAGqQ,EAAWa,YAAY,OAC9D/iB,KAAK6Q,MAAMqR,EAAWrQ,UAAU,EAAGqQ,EAAWa,YAAY,MACrE,CACA,MAAO5lB,GAAK,CAEhBklB,EAAoB/iB,OAAOnC,GAC/B,CACJ,CACA,MAAM6H,EAAQ6H,EAGd,IAF0B,MAAtBqV,EAAWrV,IACXA,IACGqV,EAAWrV,KAAW,MAAMrN,SAAS0iB,EAAWrV,KACnDA,IACAA,GAAS1F,GAAY0a,GAAYM,GACjCC,EAAgB,+BACpB,IACI,OAAOpiB,KAAK6Q,MAAMqR,EAAWrQ,UAAU7M,EAAO6H,GAClD,CACA,MAAO1P,GACwC,MAAvC+kB,EAAWrQ,UAAU7M,EAAO6H,IAAkBgV,GAAYM,GAC1DC,EAAgB,wBACpB,IACI,OAAOpiB,KAAK6Q,MAAMqR,EAAWrQ,UAAU7M,EAAOkd,EAAWa,YAAY,MACzE,CACA,MAAO5lB,GACHklB,EAAoB/iB,OAAOnC,GAC/B,CACJ,GAEEolB,EAAY,KACd,KAAO1V,EAAQ1F,GAAU,UAAU3H,SAAS0iB,EAAWrV,KACnDA,GACJ,EAEJ,OAAOyV,GAAU,EAGfY,GAAgBC,GAnMtB,SAAmBjB,EAAYkB,EAAevB,IAC1C,GAA0B,iBAAfK,EACP,MAAM,IAAInkB,UAAU,6BAA6BmkB,GAErD,IAAKA,EAAWtP,OACZ,MAAM,IAAIlT,MAAM,GAAGwiB,cAEvB,OAAOD,GAAWC,EAAWtP,OAAQwQ,EACzC,CA2LgCC,CAAUF,EAAOtB,GAAYA,IC9O7D,IAAIyB,GAAiCC,GAA8BC,GAAyCC,GAAqDC,GAAoCC,GAA2CC,GAAgCC,GAA6CC,GAA6CC,GAAkCC,GAAsDC,GAO3b,MAAMC,WAA6BnF,GACtC,WAAA3e,CAAYuY,GACRpY,QACA+iB,GAAgC9F,IAAI/c,MACpC8iB,GAA6BvlB,IAAIyC,UAAM,GACvC+iB,GAAwCxlB,IAAIyC,UAAM,GAClDgjB,GAAoDzlB,IAAIyC,UAAM,GAC9DhD,EAAuBgD,KAAM8iB,GAA8B5K,GAC3Dlb,EAAuBgD,KAAM+iB,GAAyC,GAC1E,CACA,iCAAIW,GACA,OAAOlmB,EAAuBwC,KAAMgjB,GAAqD,IAC7F,CAQA,yBAAO1S,CAAmBvL,GACtB,MAAMoc,EAAS,IAAIsC,GAAqB,MAExC,OADAtC,EAAOlE,MAAK,IAAMkE,EAAOwC,oBAAoB5e,KACtCoc,CACX,CACA,2BAAOyC,CAAqBhW,EAAQsK,EAAQnN,GACxC,MAAMoW,EAAS,IAAIsC,GAAqBvL,GAExC,OADAiJ,EAAOlE,MAAK,IAAMkE,EAAOtB,mBAAmBjS,EAAQ,IAAKsK,EAAQnT,QAAQ,GAAQ,IAAKgG,EAASlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,cACrJshB,CACX,CACA,2BAAM3B,CAAsB5R,EAAQsK,EAAQnN,GACxCjL,MAAM0f,sBACN,MAAMC,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3DjS,EAAuBwC,KAAM6iB,GAAiC,IAAKI,IAAoCxlB,KAAKuC,MAC5G,MAAM+E,QAAe6I,EAAO+R,KAAKC,YAAY9H,OAAO,IAAKI,EAAQnT,QAAQ,GAAQ,IAAKgG,EAAS0U,OAAQzf,KAAKyE,WAAWgb,SACvHzf,KAAKqd,aACL,UAAW,MAAMvR,KAAS/G,EACtBvH,EAAuBwC,KAAM6iB,GAAiC,IAAKM,IAAgC1lB,KAAKuC,KAAM8L,GAElH,GAAI/G,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAKye,mBAAmBjhB,EAAuBwC,KAAM6iB,GAAiC,IAAKS,IAAkC7lB,KAAKuC,MAC7I,CACA,yBAAM2jB,CAAoBpT,EAAgBxF,GACtC,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3DjS,EAAuBwC,KAAM6iB,GAAiC,IAAKI,IAAoCxlB,KAAKuC,MAC5GA,KAAKqd,aACL,MAAMtY,EAASmK,GAAOoB,mBAAmBC,EAAgBvQ,KAAKyE,YAC9D,IAAIof,EACJ,UAAW,MAAM/X,KAAS/G,EAClB8e,GAAUA,IAAW/X,EAAM4I,IAE3B1U,KAAKye,mBAAmBjhB,EAAuBwC,KAAM6iB,GAAiC,IAAKS,IAAkC7lB,KAAKuC,OAEtIxC,EAAuBwC,KAAM6iB,GAAiC,IAAKM,IAAgC1lB,KAAKuC,KAAM8L,GAC9G+X,EAAS/X,EAAM4I,GAEnB,GAAI3P,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAKye,mBAAmBjhB,EAAuBwC,KAAM6iB,GAAiC,IAAKS,IAAkC7lB,KAAKuC,MAC7I,CACA,EAAE8iB,GAA+B,IAAIjY,QAAWkY,GAA0C,IAAIlY,QAAWmY,GAAsD,IAAInY,QAAWgY,GAAkC,IAAI1E,QAAW8E,GAAqC,WAC5PjjB,KAAKsd,OAETtgB,EAAuBgD,KAAMgjB,QAAqD7hB,EACtF,EAAG+hB,GAA4C,SAAmDlJ,GAC9F,IAAI9c,EAAQM,EAAuBwC,KAAM+iB,GAAyC,KAAK/I,EAAO5N,OAC9F,OAAIlP,IAGJA,EAAQ,CACJ4mB,cAAc,EACdC,cAAc,EACdC,uBAAuB,EACvBC,uBAAuB,EACvBC,gBAAiB,IAAIhX,IACrBiX,wBAAyB,MAE7B3mB,EAAuBwC,KAAM+iB,GAAyC,KAAK/I,EAAO5N,OAASlP,EACpFA,EACX,EAAGimB,GAAiC,SAAwCrX,GACxE,GAAI9L,KAAKsd,MACL,OACJ,MAAMxD,EAAatc,EAAuBwC,KAAM6iB,GAAiC,IAAKW,IAAgD/lB,KAAKuC,KAAM8L,GACjJ9L,KAAKod,MAAM,QAAStR,EAAOgO,GAC3B,IAAK,MAAME,KAAUlO,EAAMiO,QAAS,CAChC,MAAMqK,EAAiBtK,EAAWC,QAAQC,EAAO5N,OACrB,MAAxB4N,EAAOqK,MAAMvJ,SACoB,cAAjCsJ,EAAetlB,SAASyc,MACxB6I,EAAetlB,SAASgc,UACxB9a,KAAKod,MAAM,UAAWpD,EAAOqK,MAAMvJ,QAASsJ,EAAetlB,QAAQgc,SACnE9a,KAAKod,MAAM,gBAAiB,CACxBiH,MAAOrK,EAAOqK,MAAMvJ,QACpBwJ,SAAUF,EAAetlB,QAAQgc,QACjCD,OAAQuJ,EAAetlB,QAAQ+b,UAGX,MAAxBb,EAAOqK,MAAMtJ,SACoB,cAAjCqJ,EAAetlB,SAASyc,MACxB6I,EAAetlB,SAASic,SACxB/a,KAAKod,MAAM,gBAAiB,CACxBiH,MAAOrK,EAAOqK,MAAMtJ,QACpBuJ,SAAUF,EAAetlB,QAAQic,UAGT,MAA5Bf,EAAOuK,UAAUzJ,SAAoD,cAAjCsJ,EAAetlB,SAASyc,MAC5Dvb,KAAKod,MAAM,yBAA0B,CACjCtC,QAASd,EAAOuK,UAAUzJ,QAC1BwJ,SAAUF,EAAeG,UAAUzJ,SAAW,KAGtB,MAA5Bd,EAAOuK,UAAUxJ,SAAoD,cAAjCqJ,EAAetlB,SAASyc,MAC5Dvb,KAAKod,MAAM,yBAA0B,CACjCrC,QAASf,EAAOuK,UAAUxJ,QAC1BuJ,SAAUF,EAAeG,UAAUxJ,SAAW,KAGtD,MAAM7d,EAAQM,EAAuBwC,KAAM6iB,GAAiC,IAAKK,IAA2CzlB,KAAKuC,KAAMokB,GACnIA,EAAenK,gBACfzc,EAAuBwC,KAAM6iB,GAAiC,IAAKQ,IAA6C5lB,KAAKuC,KAAMokB,GACtF,MAAjClnB,EAAMinB,yBACN3mB,EAAuBwC,KAAM6iB,GAAiC,IAAKO,IAA6C3lB,KAAKuC,KAAMokB,EAAgBlnB,EAAMinB,0BAGzJ,IAAK,MAAM/J,KAAYJ,EAAOqK,MAAMlK,YAAc,GAC1Cjd,EAAMinB,0BAA4B/J,EAAShO,QAC3C5O,EAAuBwC,KAAM6iB,GAAiC,IAAKQ,IAA6C5lB,KAAKuC,KAAMokB,GAEtF,MAAjClnB,EAAMinB,yBACN3mB,EAAuBwC,KAAM6iB,GAAiC,IAAKO,IAA6C3lB,KAAKuC,KAAMokB,EAAgBlnB,EAAMinB,0BAGzJjnB,EAAMinB,wBAA0B/J,EAAShO,MAE7C,IAAK,MAAMoY,KAAiBxK,EAAOqK,MAAMlK,YAAc,GAAI,CACvD,MAAMsK,EAAmBL,EAAetlB,QAAQqb,aAAaqK,EAAcpY,OACtEqY,GAAkBpkB,OAGQ,aAA3BokB,GAAkBpkB,MAClBL,KAAKod,MAAM,sCAAuC,CAC9Cxe,KAAM6lB,EAAiBhL,UAAU7a,KACjCwN,MAAOoY,EAAcpY,MACrBsO,UAAW+J,EAAiBhL,SAASiB,UACrCF,iBAAkBiK,EAAiBhL,SAASe,iBAC5CkK,gBAAiBF,EAAc/K,UAAUiB,WAAa,KAMlE,CACJ,CACJ,EAAG0I,GAA8C,SAAqDgB,EAAgBO,GAElH,GADcnnB,EAAuBwC,KAAM6iB,GAAiC,IAAKK,IAA2CzlB,KAAKuC,KAAMokB,GAC7HF,gBAAgB7mB,IAAIsnB,GAE1B,OAEJ,MAAMF,EAAmBL,EAAetlB,QAAQqb,aAAawK,GAC7D,IAAKF,EACD,MAAM,IAAIxlB,MAAM,yBAEpB,IAAKwlB,EAAiBpkB,KAClB,MAAM,IAAIpB,MAAM,qCAEpB,GAA8B,aAA1BwlB,EAAiBpkB,KAAqB,CACtC,MAAMga,EAAY7c,EAAuBwC,KAAM8iB,GAA8B,MAAMxI,OAAOC,MAAMf,GAASD,GAA6BC,IAASA,EAAKC,SAAS7a,OAAS6lB,EAAiBhL,SAAS7a,OAChMoB,KAAKod,MAAM,qCAAsC,CAC7Cxe,KAAM6lB,EAAiBhL,SAAS7a,KAChCwN,MAAOuY,EACPjK,UAAW+J,EAAiBhL,SAASiB,UACrCF,iBAAkBZ,GAAmBS,GAAaA,EAAUI,UAAUgK,EAAiBhL,SAASiB,WAC1FL,GAAWZ,SAASkB,OAASpb,KAAK6Q,MAAMqU,EAAiBhL,SAASiB,WAC9D,MAElB,MAEgB+J,EAAiBpkB,IAErC,EAAGgjB,GAA8C,SAAqDe,GAClG,MAAMlnB,EAAQM,EAAuBwC,KAAM6iB,GAAiC,IAAKK,IAA2CzlB,KAAKuC,KAAMokB,GACvI,GAAIA,EAAetlB,QAAQgc,UAAY5d,EAAM4mB,aAAc,CACvD5mB,EAAM4mB,cAAe,EACrB,MAAMc,EAAiBpnB,EAAuBwC,KAAM6iB,GAAiC,IAAKU,IAAsD9lB,KAAKuC,MACrJA,KAAKod,MAAM,eAAgB,CACvBtC,QAASsJ,EAAetlB,QAAQgc,QAChCD,OAAQ+J,EAAiBA,EAAenK,UAAU2J,EAAetlB,QAAQgc,SAAW,MAE5F,CACIsJ,EAAetlB,QAAQic,UAAY7d,EAAM6mB,eACzC7mB,EAAM6mB,cAAe,EACrB/jB,KAAKod,MAAM,eAAgB,CAAErC,QAASqJ,EAAetlB,QAAQic,WAE7DqJ,EAAeG,UAAUzJ,UAAY5d,EAAM8mB,wBAC3C9mB,EAAM8mB,uBAAwB,EAC9BhkB,KAAKod,MAAM,wBAAyB,CAAEtC,QAASsJ,EAAeG,SAASzJ,WAEvEsJ,EAAeG,UAAUxJ,UAAY7d,EAAM+mB,wBAC3C/mB,EAAM+mB,uBAAwB,EAC9BjkB,KAAKod,MAAM,wBAAyB,CAAErC,QAASqJ,EAAeG,SAASxJ,UAE/E,EAAGuI,GAAmC,WAClC,GAAItjB,KAAKsd,MACL,MAAM,IAAI7d,EAAY,2CAE1B,MAAM6kB,EAAW9mB,EAAuBwC,KAAMgjB,GAAqD,KACnG,IAAKsB,EACD,MAAM,IAAI7kB,EAAY,4CAI1B,OAFAzC,EAAuBgD,KAAMgjB,QAAqD7hB,GAClFnE,EAAuBgD,KAAM+iB,GAAyC,IAqK9E,SAAgCuB,EAAUpM,GACtC,MAAMxD,GAAEA,EAAEqF,QAAEA,EAAO8K,QAAEA,EAAOC,MAAEA,EAAKC,mBAAEA,KAAuBC,GAASV,EAC/DxK,EAAa,IACZkL,EACHtQ,KACAqF,QAASA,EAAQnL,KAAI,EAAG9P,UAASmb,gBAAe7N,QAAOmY,cAAaU,MAChE,IAAKhL,EACD,MAAM,IAAIxa,EAAY,oCAAoC2M,KAE9D,MAAM0O,QAAEA,EAAU,KAAIoK,cAAEA,EAAa/K,WAAEA,KAAegL,GAAgBrmB,EAChEyc,EAAOzc,EAAQyc,KACrB,IAAKA,EACD,MAAM,IAAI9b,EAAY,2BAA2B2M,KAErD,GAAI8Y,EAAe,CACf,MAAQxK,UAAW3W,EAAInF,KAAEA,GAASsmB,EAClC,GAAY,MAARnhB,EACA,MAAM,IAAItE,EAAY,8CAA8C2M,KAExE,IAAKxN,EACD,MAAM,IAAIa,EAAY,yCAAyC2M,KAEnE,MAAO,IACA6Y,EACHnmB,QAAS,CACLgc,UACAoK,cAAe,CAAExK,UAAW3W,EAAMnF,QAClC2c,OACAR,QAASjc,EAAQic,SAAW,MAEhCd,gBACA7N,QACAmY,WAER,CACA,OAAIpK,EACO,IACA8K,EACH7Y,QACA6N,gBACAsK,WACAzlB,QAAS,IACFqmB,EACH5J,OACAT,UACAC,QAASjc,EAAQic,SAAW,KAC5BZ,WAAYA,EAAWvL,KAAI,CAACiQ,EAAW1Y,KACnC,MAAQsT,SAAUjT,EAAEnG,KAAEA,EAAIqU,GAAEA,KAAO0Q,GAAavG,GACxCnE,UAAW3W,EAAInF,KAAEA,KAASymB,GAAW7e,GAAM,CAAA,EACnD,GAAU,MAANkO,EACA,MAAM,IAAIjV,EAAY,mBAAmB2M,iBAAqBjG,UAAU6B,GAAIsc,MAEhF,GAAY,MAARjkB,EACA,MAAM,IAAIZ,EAAY,mBAAmB2M,iBAAqBjG,YAAY6B,GAAIsc,MAElF,GAAY,MAAR1lB,EACA,MAAM,IAAIa,EAAY,mBAAmB2M,iBAAqBjG,qBAAqB6B,GAAIsc,MAE3F,GAAY,MAARvgB,EACA,MAAM,IAAItE,EAAY,mBAAmB2M,iBAAqBjG,0BAA0B6B,GAAIsc,MAEhG,MAAO,IAAKc,EAAU1Q,KAAIrU,OAAMoZ,SAAU,IAAK4L,EAAQzmB,OAAM8b,UAAW3W,GAAQ,MAKzF,IACAkhB,EACHnmB,QAAS,IAAKqmB,EAAarK,UAASS,OAAMR,QAASjc,EAAQic,SAAW,MACtEd,gBACA7N,QACAmY,WACH,IAELM,UACAC,QACAtb,OAAQ,qBACJub,EAAqB,CAAEA,sBAAuB,IAEtD,OPlaG,SAAkCjL,EAAY5B,GACjD,OAAKA,GAAWgD,GAAsBhD,GAoB/B2B,GAAoBC,EAAY5B,GAnB5B,IACA4B,EACHC,QAASD,EAAWC,QAAQnL,KAAKoL,IAC7BE,GAAkDF,EAAOlb,QAAQqb,YAC1D,IACAH,EACHlb,QAAS,IACFkb,EAAOlb,QACV+b,OAAQ,QACJb,EAAOlb,QAAQqb,WACf,CACIA,WAAYH,EAAOlb,QAAQqb,iBAE7BhZ,OAO9B,CO4YWmkB,CAAyBxL,EAAY5B,EAChD,CApPeqN,CAAuBjB,EAAU9mB,EAAuBwC,KAAM8iB,GAA8B,KACvG,EAAGS,GAAuD,WACtD,MAAMqB,EAAiBpnB,EAAuBwC,KAAM8iB,GAA8B,MAAMnJ,gBACxF,OAAID,GAA6BkL,GACtBA,EAEJ,IACX,EAAGpB,GAAiD,SAAwD1X,GACxG,IAAI0Z,EAAIC,EAAIC,EAAIC,EAChB,IAAIrB,EAAW9mB,EAAuBwC,KAAMgjB,GAAqD,KACjG,MAAMjJ,QAAEA,KAAYiL,GAASlZ,EACxBwY,EAODplB,OAAO0mB,OAAOtB,EAAUU,GANxBV,EAAWtnB,EAAuBgD,KAAMgjB,GAAqD,IACtFgC,EACHjL,QAAS,KAMjB,IAAK,MAAMsK,MAAEA,EAAKpK,cAAEA,EAAa7N,MAAEA,EAAKmY,SAAEA,EAAW,QAASsB,KAAW/Z,EAAMiO,QAAS,CACpF,IAAIC,EAASsK,EAASvK,QAAQ3N,GAI9B,GAHK4N,IACDA,EAASsK,EAASvK,QAAQ3N,GAAS,CAAE6N,gBAAe7N,QAAOtN,QAAS,CAAA,EAAIylB,cAAasB,IAErFtB,EACA,GAAKvK,EAAOuK,SAGP,CACD,MAAMzJ,QAAEA,EAAOC,QAAEA,KAAYiK,GAAST,EAEtCrlB,OAAO0mB,OAAO5L,EAAOuK,SAAUS,GAC3BlK,KACC0K,EAAKxL,EAAOuK,UAAUzJ,UAAY0K,EAAG1K,QAAU,IAChDd,EAAOuK,SAASzJ,QAAQ1U,QAAQ0U,IAEhCC,KACC0K,EAAKzL,EAAOuK,UAAUxJ,UAAY0K,EAAG1K,QAAU,IAChDf,EAAOuK,SAASxJ,QAAQ3U,QAAQ2U,GAExC,MAdIf,EAAOuK,SAAWrlB,OAAO0mB,OAAO,CAAA,EAAIrB,GAgB5C,GAAItK,IACAD,EAAOC,cAAgBA,EACnBzc,EAAuBwC,KAAM8iB,GAA8B,MAAQ5H,GAAsB1d,EAAuBwC,KAAM8iB,GAA8B,OAAO,CAC3J,GAAsB,WAAlB7I,EACA,MAAM,IAAI5Y,EAEd,GAAsB,mBAAlB4Y,EACA,MAAM,IAAI3Y,CAElB,CAGJ,GADApC,OAAO0mB,OAAO5L,EAAQ6L,IACjBxB,EACD,SACJ,MAAMvJ,QAAEA,EAAOC,QAAEA,EAAOmK,cAAEA,EAAa3J,KAAEA,EAAIpB,WAAEA,KAAe6K,GAASX,EA2BvE,GAzBAnlB,OAAO0mB,OAAO5L,EAAOlb,QAASkmB,GAC1BjK,IACAf,EAAOlb,QAAQic,SAAWf,EAAOlb,QAAQic,SAAW,IAAMA,GAE1DQ,IACAvB,EAAOlb,QAAQyc,KAAOA,GACtB2J,IACKlL,EAAOlb,QAAQomB,eAIZA,EAActmB,OACdob,EAAOlb,QAAQomB,cAActmB,KAAOsmB,EAActmB,MAClDsmB,EAAcxK,aACbgL,EAAK1L,EAAOlb,QAAQomB,eAAexK,YAAcgL,EAAGhL,UAAY,IACjEV,EAAOlb,QAAQomB,cAAcxK,WAAawK,EAAcxK,YAP5DV,EAAOlb,QAAQomB,cAAgBA,GAWnCpK,IACAd,EAAOlb,QAAQgc,SAAWd,EAAOlb,QAAQgc,SAAW,IAAMA,GACrDd,EAAOlb,QAAQic,SAAWvd,EAAuBwC,KAAM6iB,GAAiC,IAAKU,IAAsD9lB,KAAKuC,QACzJga,EAAOlb,QAAQ+b,OAAS4H,GAAazI,EAAOlb,QAAQgc,WAGxDX,EAAY,CACPH,EAAOlb,QAAQqb,aAChBH,EAAOlb,QAAQqb,WAAa,IAChC,IAAK,MAAM/N,MAAEA,EAAKsI,GAAEA,EAAErU,KAAEA,EAAMoZ,SAAUjT,KAAOwe,KAAU7K,EAAY,CACjE,MAAM0E,GAAc8G,EAAK3L,EAAOlb,QAAQqb,YAAY/N,KAAWuZ,EAAGvZ,GAAS,CAAA,GAC3ElN,OAAO0mB,OAAO/G,EAAWmG,GACrBtQ,IACAmK,EAAUnK,GAAKA,GACfrU,IACAwe,EAAUxe,KAAOA,GACjBmG,IACAqY,EAAUpF,WAAaoF,EAAUpF,SAAW,CAAE7a,KAAM4H,EAAG5H,MAAQ,GAAI8b,UAAW,MAC9ElU,GAAI5H,OACJigB,EAAUpF,SAAS7a,KAAO4H,EAAG5H,MAC7B4H,GAAIkU,YACJmE,EAAUpF,SAASiB,WAAalU,EAAGkU,UAC/BO,GAAoBzd,EAAuBwC,KAAM8iB,GAA8B,KAAMjE,KACrFA,EAAUpF,SAASe,iBAAmBiI,GAAa5D,EAAUpF,SAASiB,YAGlF,CACJ,CACJ,CACA,OAAO4J,CACX,EAAGlgB,OAAOC,kBACN,MAAMyhB,EAAY,GACZC,EAAY,GAClB,IAAIlpB,GAAO,EA+BX,OA9BAmD,KAAKyd,GAAG,SAAU3R,IACd,MAAM9G,EAAS+gB,EAAUjV,QACrB9L,EACAA,EAAO5I,QAAQ0P,GAGfga,EAAU1f,KAAK0F,EACnB,IAEJ9L,KAAKyd,GAAG,OAAO,KACX5gB,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO5I,aAAQ+E,GAEnB4kB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAEjB,CACHjK,KAAM8S,UACF,IAAKuW,EAAUpf,OACX,OAAI7J,EACO,CAAEN,WAAO4E,EAAWtE,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW0pB,EAAU3f,KAAK,CAAEhK,UAASC,aAAWS,MAAMgP,GAAWA,EAAQ,CAAEvP,MAAOuP,EAAOjP,MAAM,GAAU,CAAEN,WAAO4E,EAAWtE,MAAM,KAGpK,MAAO,CAAEN,MADKupB,EAAUhV,QACDjU,MAAM,EAAO,EAExCgI,OAAQ0K,UACJvP,KAAKyP,QACE,CAAElT,WAAO4E,EAAWtE,MAAM,IAG7C,CACA,gBAAAkU,GAEI,OADe,IAAI7B,GAAOlP,KAAKoE,OAAOC,eAAerG,KAAKgC,MAAOA,KAAKyE,YACxDsM,kBAClB,EAmFJ,SAAS/I,GAAIlG,GACT,OAAOvC,KAAKC,UAAUsC,EAC1B,CC7dO,MAAMkkB,WAAsCvC,GAC/C,yBAAOnT,CAAmBvL,GACtB,MAAMoc,EAAS,IAAI6E,GAA8B,MAEjD,OADA7E,EAAOlE,MAAK,IAAMkE,EAAOwC,oBAAoB5e,KACtCoc,CACX,CACA,eAAOD,CAAStT,EAAQsK,EAAQnN,GAC5B,MAAMoW,EAAS,IAAI6E,GAEnB9N,GACMpN,EAAO,IACNC,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,aAGjE,OADAshB,EAAOlE,MAAK,IAAMkE,EAAOrB,UAAUlS,EAAQsK,EAAQpN,KAC5CqW,CACX,SCPG,cAA0B3J,GAC7B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKwe,SAAW,IAAIyH,GAAqBjmB,KAAKyX,QAClD,CACA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,oBAAqB,CAAE5gB,UAASyF,EAAShG,OAAQO,EAAKP,SAAU,GAC7F,CAWA,QAAAohB,CAAS9M,EAActO,GACnB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,qBAAqB2D,IAAgBtO,EACtE,CAcA,MAAAqb,CAAO/M,EAAc/T,EAAMyF,GACvB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,qBAAqB2D,IAAgB,CAAE/T,UAASyF,GAClF,CAaA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,oBAAmB,GAAgB,CAAE3E,WAAU5J,GAClF,CAWA,OAAOsO,EAActO,GACjB,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,qBAAqB2D,IAAgBtO,EACzE,CACA,KAAAqF,CAAM9K,EAAMyF,GAER,OT0ED,SAA4BuP,GAC/B,IAAK,MAAMd,KAAQc,GAAS,GAAI,CAC5B,GAAkB,aAAdd,EAAKnZ,KACL,MAAM,IAAIZ,EAAY,2EAA2E+Z,EAAKnZ,UAE1G,IAA6B,IAAzBmZ,EAAKC,SAASkB,OACd,MAAM,IAAIlb,EAAY,SAAS+Z,EAAKC,SAAS7a,iGAErD,CACJ,CSpFQ0nB,CAAmBhhB,EAAKgV,OACjBta,KAAKyX,QAAQkI,KAAKC,YACpB9H,OAAOxS,EAAM,IACXyF,EACHlL,QAAS,IACFkL,GAASlL,QACZ,4BAA6B,4BAGhCiT,aAAagH,GAAeD,GAAoBC,EAAYxU,IACrE,CACA,QAAA4b,CAAS5b,EAAMyF,GACX,OAAIzF,EAAKP,OACEihB,GAA8B9E,SAASlhB,KAAKyX,QAASnS,EAAMyF,GAE/DkW,GAAqBC,SAASlhB,KAAKyX,QAASnS,EAAMyF,EAC7D,CAIA,MAAAhG,CAAOO,EAAMyF,GACT,OAAO0Y,GAAqBG,qBAAqB5jB,KAAKyX,QAASnS,EAAMyF,EACzE,GAMJwb,GAAYC,SAAWA,GCpGhB,MAAMC,WAAajP,GACtB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK4f,YAAc,IAAI8G,GAA2B1mB,KAAKyX,QAC3D,EAEJgP,GAAKF,YAAcA,GCRnB,MAAMI,GAA+CviB,OAAO,gCAC5D,SAAUwiB,GAAe/mB,GACrB,IAAKA,EACD,OACJ,GAAI8mB,MAAgC9mB,EAAS,CACzC,MAAMwK,OAAEA,EAAMwc,MAAEA,GAAUhnB,QACnBwK,EAAOsE,UACd,IAAK,MAAM/P,KAAQioB,OACT,CAACjoB,EAAM,MAEjB,MACJ,CACA,IACIuF,EADA2iB,GAAc,EAEdjnB,aAAmB6O,QACnBvK,EAAOtE,EAAQ8O,UAEV/M,EAAgB/B,GACrBsE,EAAOtE,GAGPinB,GAAc,EACd3iB,EAAOjF,OAAOyP,QAAQ9O,GAAW,CAAA,IAErC,IAAK,IAAIknB,KAAO5iB,EAAM,CAClB,MAAMvF,EAAOmoB,EAAI,GACjB,GAAoB,iBAATnoB,EACP,MAAM,IAAItB,UAAU,uCACxB,MAAM+M,EAASzI,EAAgBmlB,EAAI,IAAMA,EAAI,GAAK,CAACA,EAAI,IACvD,IAAIC,GAAW,EACf,IAAK,MAAMzqB,KAAS8N,OACFlJ,IAAV5E,IAIAuqB,IAAgBE,IAChBA,GAAW,OACL,CAACpoB,EAAM,YAEX,CAACA,EAAMrC,GAErB,CACJ,CACO,MAAM0qB,GAAgBC,IACzB,MAAMC,EAAgB,IAAIzY,QACpB0Y,EAAc,IAAIla,IACxB,IAAK,MAAMrN,KAAWqnB,EAAY,CAC9B,MAAMG,EAAc,IAAIna,IACxB,IAAK,MAAOtO,EAAMrC,KAAUqqB,GAAe/mB,GAAU,CACjD,MAAMynB,EAAY1oB,EAAKgF,cAClByjB,EAAYhqB,IAAIiqB,KACjBH,EAAcd,OAAOznB,GACrByoB,EAAYtK,IAAIuK,IAEN,OAAV/qB,GACA4qB,EAAcd,OAAOznB,GACrBwoB,EAAYrK,IAAIuK,KAGhBH,EAAczQ,OAAO9X,EAAMrC,GAC3B6qB,EAAYf,OAAOiB,GAE3B,CACJ,CACA,MAAO,CAAEX,CAACA,KAA+B,EAAMtc,OAAQ8c,EAAeN,MAAOO,EAAa,EC/DvF,MAAMG,WAAe/P,GAgBxB,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,gBAAiB,CACtC5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,4BAA8Bzc,GAASlL,UACxEkS,kBAAkB,GAE1B,ECvBG,MAAM0V,WAAuBjQ,GAChC,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,wBAAyBrQ,GAA4B,CAC1EvQ,UACGyF,EACHhG,OAAQO,EAAKP,SAAU,EACvB2iB,WAAY,CAAE5C,MAAOxf,EAAKwf,QAC3B9kB,KAAKyX,SACZ,ECRG,MAAMkQ,WAAqBnQ,GAC9B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,sBAAuBrQ,GAA4B,CAAEvQ,UAASyF,EAAS2c,WAAY,CAAE5C,MAAOxf,EAAKwf,QAAW9kB,KAAKyX,SAC9I,ECEG,MAAMmQ,WAAcpQ,GACvB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK6nB,eAAiB,IAAIC,GAAiC9nB,KAAKyX,SAChEzX,KAAK+nB,aAAe,IAAIC,GAA6BhoB,KAAKyX,SAC1DzX,KAAKioB,OAAS,IAAIC,GAAiBloB,KAAKyX,QAC5C,EAEJmQ,GAAMH,eAAiBA,GACvBG,GAAMD,aAAeA,GACrBC,GAAML,OAASA,GCdR,MAAMY,WAAgB3Q,GAIzB,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,WAAY,CAAE5gB,UAASyF,GACpD,CAIA,QAAAob,CAASiC,EAASrd,GACd,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,YAAY0S,IAAWrd,EACxD,CAIA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,WAAU,GAAgB,CAAE3E,WAAU5J,GACzE,CAMA,MAAAnG,CAAOwjB,EAASrd,GACZ,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAY0S,WAAkBrd,EAChE,ECzBG,MAAMsd,WAAmB7Q,GAW5B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,cAAe,CACpC5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAWA,QAAAsmB,CAASmC,EAAavd,GAClB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,eAAe4S,IAAe,IACpDvd,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAWA,MAAAumB,CAAOkC,EAAahjB,EAAMyF,GACtB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,eAAe4S,IAAe,CACxDhjB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAYA,IAAAuZ,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,cAAa,GAAgB,CACxD3E,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAUA,OAAOyoB,EAAavd,GAChB,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,eAAe4S,IAAe,IACvDvd,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,ECrFG,MAAM0oB,WAAiB/Q,GAgB1B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,qBAAsB,CAC3C5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,ECtBG,MAAM2oB,WAA8BhR,GAgBvC,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,mCAAoC,CACzD5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,SChBG,cAAuB2X,GAC1B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKyoB,SAAW,IAAIC,GAAqB1oB,KAAKyX,SAC9CzX,KAAK2oB,sBAAwB,IAAIC,GAA+C5oB,KAAKyX,QACzF,GAEJoR,GAASN,SAAWA,GACpBM,GAASL,sBAAwBA,GCT1B,MAAMhC,WAAiBhP,GAM1B,MAAAM,CAAOgR,EAAUxjB,EAAMyF,GACnB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYoT,aAAqB,CAC3DxjB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,QAAAsmB,CAAS4C,EAAW7Q,EAAQnN,GACxB,MAAMie,UAAEA,GAAc9Q,EACtB,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,YAAYsT,cAAsBD,IAAa,IACrEhe,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,MAAAumB,CAAO2C,EAAW7Q,EAAQnN,GACtB,MAAMie,UAAEA,KAAc1jB,GAAS4S,EAC/B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYsT,cAAsBD,IAAa,CACzEzjB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,IAAAuZ,CAAK0P,EAAUnU,EAAQ,CAAA,EAAI5J,GACvB,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,YAAYoT,aAAmB,GAAgB,CAC/EnU,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,OAAOkpB,EAAW7Q,EAAQnN,GACtB,MAAMie,UAAEA,GAAc9Q,EACtB,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,YAAYsT,cAAsBD,IAAa,IACxEhe,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,EC7DG,MAAMopB,WAAczR,GAMvB,QAAA2O,CAAS+C,EAAQhR,EAAQnN,GACrB,MAAMie,UAAEA,EAASG,OAAEA,KAAWxU,GAAUuD,EACxC,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,YAAYsT,UAAkBG,WAAgBD,IAAU,CACjFvU,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,IAAAuZ,CAAKgQ,EAAOlR,EAAQnN,GAChB,MAAMie,UAAEA,KAAcrU,GAAUuD,EAChC,OAAOlY,KAAKyX,QAAQ6B,WAAW5D,EAAK,YAAYsT,UAAkBI,UAAa,GAAgB,CAC3FzU,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,ECGG,MC7BMwpB,GAAWC,QACc,IAAvBxrB,WAAW4E,QACX5E,WAAW4E,QAAQ4mB,MAAMA,IAAMnX,aAAUhR,OAErB,IAApBrD,WAAWyE,KACXzE,WAAWyE,KAAK+mB,KAAK5rB,MAAM4rB,IAAMnX,YAD5C,ECZJ,IAAIoX,GAA4B/D,GAAIgE,GAAyBC,GAAmCC,GAAmCC,GAAkCC,GAA2BC,GAAsCC,GAAiCC,GAAuCC,GAAkCC,GAA+BC,GAAqCC,GAAyCC,GAA2BC,GAA6BC,GAAgCC,GAAgCC,GAA8BC,GAAoCC,GAAoCC,GAAoCC,GAMxrB,MAAMC,WAAwB/N,GACjC,WAAAnd,GACIG,SAAS4a,WACT6O,GAA2BxM,IAAI/c,MAE/BwpB,GAAwBjsB,IAAIyC,KAAM,IAGlCypB,GAAkClsB,IAAIyC,KAAM,IAC5C0pB,GAAkCnsB,IAAIyC,KAAM,IAC5C2pB,GAAiCpsB,IAAIyC,UAAM,GAC3C4pB,GAA0BrsB,IAAIyC,UAAM,GACpC6pB,GAAqCtsB,IAAIyC,UAAM,GAC/C8pB,GAAgCvsB,IAAIyC,UAAM,GAC1C+pB,GAAsCxsB,IAAIyC,UAAM,GAChDgqB,GAAiCzsB,IAAIyC,UAAM,GAE3CiqB,GAA8B1sB,IAAIyC,UAAM,GACxCkqB,GAAoC3sB,IAAIyC,UAAM,GAC9CmqB,GAAwC5sB,IAAIyC,UAAM,EACtD,CACA,EAAEwpB,GAA0B,IAAI3e,QAAW4e,GAAoC,IAAI5e,QAAW6e,GAAoC,IAAI7e,QAAW8e,GAAmC,IAAI9e,QAAW+e,GAA4B,IAAI/e,QAAWgf,GAAuC,IAAIhf,QAAWif,GAAkC,IAAIjf,QAAWkf,GAAwC,IAAIlf,QAAWmf,GAAmC,IAAInf,QAAWof,GAAgC,IAAIpf,QAAWqf,GAAsC,IAAIrf,QAAWsf,GAA0C,IAAItf,QAAW0e,GAA6B,IAAIpL,QAAW/Z,OAAOC,kBAC1oB,MAAMyhB,EAAY,GACZC,EAAY,GAClB,IAAIlpB,GAAO,EAgCX,OA9BAmD,KAAKyd,GAAG,SAAUtN,IACd,MAAMnL,EAAS+gB,EAAUjV,QACrB9L,EACAA,EAAO5I,QAAQ+T,GAGf2V,EAAU1f,KAAK+J,EACnB,IAEJnQ,KAAKyd,GAAG,OAAO,KACX5gB,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO5I,aAAQ+E,GAEnB4kB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAEjB,CACHjK,KAAM8S,UACF,IAAKuW,EAAUpf,OACX,OAAI7J,EACO,CAAEN,WAAO4E,EAAWtE,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW0pB,EAAU3f,KAAK,CAAEhK,UAASC,aAAWS,MAAMgP,GAAWA,EAAQ,CAAEvP,MAAOuP,EAAOjP,MAAM,GAAU,CAAEN,WAAO4E,EAAWtE,MAAM,KAGpK,MAAO,CAAEN,MADKupB,EAAUhV,QACDjU,MAAM,EAAO,EAExCgI,OAAQ0K,UACJvP,KAAKyP,QACE,CAAElT,WAAO4E,EAAWtE,MAAM,IAG7C,CACA,yBAAOyT,CAAmBvL,GACtB,MAAMoc,EAAS,IAAIqE,GAEnB,OADArE,EAAOlE,MAAK,IAAMkE,EAAOwC,oBAAoB5e,KACtCoc,CACX,CACA,yBAAMwC,CAAoBpT,EAAgBxF,GACtC,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3DzP,KAAKqd,aACL,MAAMtY,EAASmK,GAAOoB,mBAAmBC,EAAgBvQ,KAAKyE,YAC9D,UAAW,MAAM0L,KAASpL,EACtBvH,EAAuBwC,KAAMupB,GAA4B,IAAKa,IAA2B3sB,KAAKuC,KAAMmQ,GAExG,GAAIpL,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAK8qB,QAAQttB,EAAuBwC,KAAMupB,GAA4B,IAAKc,IAA6B5sB,KAAKuC,MACxH,CACA,gBAAA+Q,GAEI,OADe,IAAI7B,GAAOlP,KAAKoE,OAAOC,eAAerG,KAAKgC,MAAOA,KAAKyE,YACxDsM,kBAClB,CACA,gCAAOga,CAA0BC,EAAOC,EAAM/S,EAAQnN,GAClD,MAAMoW,EAAS,IAAIqE,GAKnB,OAJArE,EAAOlE,MAAK,IAAMkE,EAAO+J,wBAAwBF,EAAOC,EAAM/S,EAAQ,IAC/DnN,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,cAE1DshB,CACX,CACA,gCAAMgK,CAA2BC,EAAKJ,EAAO9S,EAAQnN,GACjD,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3D,MAAMnK,EAAO,IAAK4S,EAAQnT,QAAQ,GAC5BA,QAAeqmB,EAAIC,kBAAkBL,EAAO1lB,EAAM,IACjDyF,EACH0U,OAAQzf,KAAKyE,WAAWgb,SAE5Bzf,KAAKqd,aACL,UAAW,MAAMlN,KAASpL,EACtBvH,EAAuBwC,KAAMupB,GAA4B,IAAKa,IAA2B3sB,KAAKuC,KAAMmQ,GAExG,GAAIpL,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAK8qB,QAAQttB,EAAuBwC,KAAMupB,GAA4B,IAAKc,IAA6B5sB,KAAKuC,MACxH,CACA,kCAAOsrB,CAA4BpT,EAAQqT,EAAQxgB,GAC/C,MAAMoW,EAAS,IAAIqE,GAKnB,OAJArE,EAAOlE,MAAK,IAAMkE,EAAOqK,uBAAuBtT,EAAQqT,EAAQ,IACzDxgB,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,cAE1DshB,CACX,CACA,4BAAOsK,CAAsBC,EAAUT,EAAM/S,EAAQnN,GACjD,MAAMoW,EAAS,IAAIqE,GAKnB,OAJArE,EAAOlE,MAAK,IAAMkE,EAAOwK,oBAAoBD,EAAUT,EAAM/S,EAAQ,IAC9DnN,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,cAE1DshB,CACX,CACA,YAAAyK,GACI,OAAOpuB,EAAuBwC,KAAMiqB,GAA+B,IACvE,CACA,UAAA4B,GACI,OAAOruB,EAAuBwC,KAAMkqB,GAAqC,IAC7E,CACA,sBAAA4B,GACI,OAAOtuB,EAAuBwC,KAAM2pB,GAAkC,IAC1E,CACA,sBAAAoC,GACI,OAAOvuB,EAAuBwC,KAAMmqB,GAAyC,IACjF,CACA,mBAAM6B,GAEF,aADMhsB,KAAKnD,OACJqC,OAAOmL,OAAO7M,EAAuBwC,KAAMypB,GAAmC,KACzF,CACA,mBAAMwC,GAEF,aADMjsB,KAAKnD,OACJqC,OAAOmL,OAAO7M,EAAuBwC,KAAM0pB,GAAmC,KACzF,CACA,cAAMwC,GAEF,SADMlsB,KAAKnD,QACNW,EAAuBwC,KAAM4pB,GAA2B,KACzD,MAAM3qB,MAAM,+BAChB,OAAOzB,EAAuBwC,KAAM4pB,GAA2B,IACnE,CACA,kCAAMuC,CAA6BZ,EAAQrT,EAAQnN,GAC/C,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3D,MAAMnK,EAAO,IAAK4S,EAAQnT,QAAQ,GAC5BA,QAAewmB,EAAOa,aAAa9mB,EAAM,IAAKyF,EAAS0U,OAAQzf,KAAKyE,WAAWgb,SACrFzf,KAAKqd,aACL,UAAW,MAAMlN,KAASpL,EACtBvH,EAAuBwC,KAAMupB,GAA4B,IAAKa,IAA2B3sB,KAAKuC,KAAMmQ,GAExG,GAAIpL,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAK8qB,QAAQttB,EAAuBwC,KAAMupB,GAA4B,IAAKc,IAA6B5sB,KAAKuC,MACxH,CACA,4BAAMqsB,CAAuBjB,EAAKM,EAAUxT,EAAQnN,GAChD,MAAM0U,EAAS1U,GAAS0U,OACpBA,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3D,MAAMnK,EAAO,IAAK4S,EAAQnT,QAAQ,GAC5BA,QAAeqmB,EAAItT,OAAO4T,EAAUpmB,EAAM,IAAKyF,EAAS0U,OAAQzf,KAAKyE,WAAWgb,SACtFzf,KAAKqd,aACL,UAAW,MAAMlN,KAASpL,EACtBvH,EAAuBwC,KAAMupB,GAA4B,IAAKa,IAA2B3sB,KAAKuC,KAAMmQ,GAExG,GAAIpL,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAOlB,KAAK8qB,QAAQttB,EAAuBwC,KAAMupB,GAA4B,IAAKc,IAA6B5sB,KAAKuC,MACxH,CACA,sBAAOssB,CAAgBrT,EAAKoL,GACxB,IAAK,MAAOhhB,EAAKkpB,KAAertB,OAAOyP,QAAQ0V,GAAQ,CACnD,IAAKpL,EAAIjT,eAAe3C,GAAM,CAC1B4V,EAAI5V,GAAOkpB,EACX,QACJ,CACA,IAAIC,EAAWvT,EAAI5V,GACnB,GAAImpB,QAKJ,GAAY,UAARnpB,GAA2B,SAARA,EAAvB,CAKA,GAAwB,iBAAbmpB,GAA+C,iBAAfD,EACvCC,GAAYD,OAEX,GAAwB,iBAAbC,GAA+C,iBAAfD,EAC5CC,GAAYD,MAEX,KAAIxqB,EAAMyqB,KAAazqB,EAAMwqB,GAG7B,IAAI5qB,MAAMF,QAAQ+qB,IAAa7qB,MAAMF,QAAQ8qB,GAAa,CAC3D,GAAIC,EAASC,OAAO3qB,GAAmB,iBAANA,GAA+B,iBAANA,IAAiB,CACvE0qB,EAASpmB,QAAQmmB,GACjB,QACJ,CACA,IAAK,MAAMG,KAAcH,EAAY,CACjC,IAAKxqB,EAAM2qB,GACP,MAAM,IAAIztB,MAAM,uDAAuDytB,KAE3E,MAAMtgB,EAAQsgB,EAAkB,MAChC,GAAa,MAATtgB,EAEA,MADAkD,QAAQlQ,MAAMstB,GACR,IAAIztB,MAAM,0DAEpB,GAAqB,iBAAVmN,EACP,MAAM,IAAInN,MAAM,wEAAwEmN,KAE5F,MAAMugB,EAAWH,EAASpgB,GACV,MAAZugB,EACAH,EAASpmB,KAAKsmB,GAGdF,EAASpgB,GAASpM,KAAKssB,gBAAgBK,EAAUD,EAEzD,CACA,QACJ,CAEI,MAAMztB,MAAM,0BAA0BoE,kBAAoBkpB,gBAAyBC,IACvF,CA/BIA,EAAWxsB,KAAKssB,gBAAgBE,EAAUD,EA+B9C,CACAtT,EAAI5V,GAAOmpB,CAzCX,MAFIvT,EAAI5V,GAAOkpB,OALXtT,EAAI5V,GAAOkpB,CAiDnB,CACA,OAAOtT,CACX,CACA,OAAA6R,CAAQM,GACJ,OAAOA,CACX,CACA,4BAAMI,CAAuBtT,EAAQqT,EAAQxgB,GACzC,aAAa/K,KAAKmsB,6BAA6BZ,EAAQrT,EAAQnN,EACnE,CACA,yBAAM4gB,CAAoBD,EAAUT,EAAM/S,EAAQnN,GAC9C,aAAa/K,KAAKqsB,uBAAuBpB,EAAMS,EAAUxT,EAAQnN,EACrE,CACA,6BAAMmgB,CAAwBF,EAAOC,EAAM/S,EAAQnN,GAC/C,aAAa/K,KAAKmrB,2BAA2BF,EAAMD,EAAO9S,EAAQnN,EACtE,EAEJya,GAAKqF,GAAiBT,GAA4B,SAAmCja,GACjF,IAAInQ,KAAKsd,MAIT,OAFAtgB,EAAuBgD,KAAMiqB,GAA+B9Z,GAC5D3S,EAAuBwC,KAAMupB,GAA4B,IAAKiB,IAA8B/sB,KAAKuC,KAAMmQ,GAC/FA,EAAMA,OACV,IAAK,iBAED,MACJ,IAAK,qBACL,IAAK,oBACL,IAAK,yBACL,IAAK,6BACL,IAAK,uBACL,IAAK,wBACL,IAAK,oBACL,IAAK,wBACL,IAAK,uBACL,IAAK,qBACD3S,EAAuBwC,KAAMupB,GAA4B,IAAKqB,IAA4BntB,KAAKuC,KAAMmQ,GACrG,MACJ,IAAK,0BACL,IAAK,8BACL,IAAK,wBACL,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACD3S,EAAuBwC,KAAMupB,GAA4B,IAAKgB,IAAgC9sB,KAAKuC,KAAMmQ,GACzG,MACJ,IAAK,yBACL,IAAK,6BACL,IAAK,uBACL,IAAK,2BACL,IAAK,4BACD3S,EAAuBwC,KAAMupB,GAA4B,IAAKe,IAAgC7sB,KAAKuC,KAAMmQ,GACzG,MACJ,IAAK,QAED,MAAM,IAAIlR,MAAM,uFAI5B,EAAGorB,GAA8B,WAC7B,GAAIrqB,KAAKsd,MACL,MAAM,IAAI7d,EAAY,2CAE1B,IAAKjC,EAAuBwC,KAAM4pB,GAA2B,KACzD,MAAM3qB,MAAM,mCAChB,OAAOzB,EAAuBwC,KAAM4pB,GAA2B,IACnE,EAAGU,GAAiC,SAAwCna,GACxE,MAAOyc,EAAoBC,GAAcrvB,EAAuBwC,KAAMupB,GAA4B,IAAKmB,IAAoCjtB,KAAKuC,KAAMmQ,EAAO3S,EAAuBwC,KAAM2pB,GAAkC,MAC5N3sB,EAAuBgD,KAAM2pB,GAAkCiD,GAC/DpvB,EAAuBwC,KAAM0pB,GAAmC,KAAKkD,EAAmBlY,IAAMkY,EAC9F,IAAK,MAAM9R,KAAW+R,EAAY,CAC9B,MAAMC,EAAkBF,EAAmB9R,QAAQA,EAAQ1O,OAC9B,QAAzB0gB,GAAiBzsB,MACjBL,KAAKod,MAAM,cAAe0P,EAAgBxa,KAElD,CACA,OAAQnC,EAAMA,OACV,IAAK,yBACDnQ,KAAKod,MAAM,iBAAkBjN,EAAMjQ,MACnC,MACJ,IAAK,6BACD,MACJ,IAAK,uBAED,GADAF,KAAKod,MAAM,eAAgBjN,EAAMjQ,KAAKmkB,MAAOuI,GACzCzc,EAAMjQ,KAAKmkB,MAAMvJ,QACjB,IAAK,MAAMA,KAAW3K,EAAMjQ,KAAKmkB,MAAMvJ,QAAS,CAE5C,GAAoB,QAAhBA,EAAQza,MAAkBya,EAAQxI,KAAM,CACxC,IAAIya,EAAYjS,EAAQxI,KACpBgS,EAAWsI,EAAmB9R,QAAQA,EAAQ1O,OAClD,IAAIkY,GAA6B,QAAjBA,EAASjkB,KAIrB,MAAMpB,MAAM,uEAHZe,KAAKod,MAAM,YAAa2P,EAAWzI,EAAShS,KAKpD,CACA,GAAIwI,EAAQ1O,OAAS5O,EAAuBwC,KAAM6pB,GAAsC,KAAM,CAE1F,GAAIrsB,EAAuBwC,KAAM8pB,GAAiC,KAC9D,OAAQtsB,EAAuBwC,KAAM8pB,GAAiC,KAAKzpB,MACvE,IAAK,OACDL,KAAKod,MAAM,WAAY5f,EAAuBwC,KAAM8pB,GAAiC,KAAKxX,KAAM9U,EAAuBwC,KAAM2pB,GAAkC,MAC/J,MACJ,IAAK,aACD3pB,KAAKod,MAAM,gBAAiB5f,EAAuBwC,KAAM8pB,GAAiC,KAAKkD,WAAYxvB,EAAuBwC,KAAM2pB,GAAkC,MAItL3sB,EAAuBgD,KAAM6pB,GAAsC/O,EAAQ1O,MAC/E,CACApP,EAAuBgD,KAAM8pB,GAAiC8C,EAAmB9R,QAAQA,EAAQ1O,OACrG,CAEJ,MACJ,IAAK,2BACL,IAAK,4BAED,QAAgFjL,IAA5E3D,EAAuBwC,KAAM6pB,GAAsC,KAAoB,CACvF,MAAMoD,EAAiB9c,EAAMjQ,KAAK4a,QAAQtd,EAAuBwC,KAAM6pB,GAAsC,MAC7G,GAAIoD,EACA,OAAQA,EAAe5sB,MACnB,IAAK,aACDL,KAAKod,MAAM,gBAAiB6P,EAAeD,WAAYxvB,EAAuBwC,KAAM2pB,GAAkC,MACtH,MACJ,IAAK,OACD3pB,KAAKod,MAAM,WAAY6P,EAAe3a,KAAM9U,EAAuBwC,KAAM2pB,GAAkC,MAI3H,CACInsB,EAAuBwC,KAAM2pB,GAAkC,MAC/D3pB,KAAKod,MAAM,cAAejN,EAAMjQ,MAEpClD,EAAuBgD,KAAM2pB,QAAkCxoB,GAE3E,EAAGopB,GAAiC,SAAwCpa,GACxE,MAAM+c,EAAqB1vB,EAAuBwC,KAAMupB,GAA4B,IAAKkB,IAAoChtB,KAAKuC,KAAMmQ,GAExI,OADAnT,EAAuBgD,KAAMmqB,GAAyC+C,GAC9D/c,EAAMA,OACV,IAAK,0BACDnQ,KAAKod,MAAM,iBAAkBjN,EAAMjQ,MACnC,MACJ,IAAK,wBACD,MAAMmkB,EAAQlU,EAAMjQ,KAAKmkB,MACzB,GAAIA,EAAM8I,cACqB,cAA3B9I,EAAM8I,aAAa9sB,MACnBgkB,EAAM8I,aAAahT,YACqB,cAAxC+S,EAAmBC,aAAa9sB,KAChC,IAAK,MAAM+Z,KAAYiK,EAAM8I,aAAahT,WAClCC,EAAShO,OAAS5O,EAAuBwC,KAAM+pB,GAAuC,KACtF/pB,KAAKod,MAAM,gBAAiBhD,EAAU8S,EAAmBC,aAAahT,WAAWC,EAAShO,SAGtF5O,EAAuBwC,KAAMgqB,GAAkC,MAC/DhqB,KAAKod,MAAM,eAAgB5f,EAAuBwC,KAAMgqB,GAAkC,MAE9FhtB,EAAuBgD,KAAM+pB,GAAuC3P,EAAShO,OAC7EpP,EAAuBgD,KAAMgqB,GAAkCkD,EAAmBC,aAAahT,WAAWC,EAAShO,QAC/G5O,EAAuBwC,KAAMgqB,GAAkC,MAC/DhqB,KAAKod,MAAM,kBAAmB5f,EAAuBwC,KAAMgqB,GAAkC,OAI7GhqB,KAAKod,MAAM,eAAgBjN,EAAMjQ,KAAKmkB,MAAO6I,GAC7C,MACJ,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACDlwB,EAAuBgD,KAAMmqB,QAAyChpB,GAElD,cADJgP,EAAMjQ,KAAKitB,aACf9sB,MACJ7C,EAAuBwC,KAAMgqB,GAAkC,OAC/DhqB,KAAKod,MAAM,eAAgB5f,EAAuBwC,KAAMgqB,GAAkC,MAC1FhtB,EAAuBgD,KAAMgqB,QAAkC7oB,IAGvEnB,KAAKod,MAAM,cAAejN,EAAMjQ,KAAMgtB,GAKlD,EAAG1C,GAA+B,SAAsCra,GACpE3S,EAAuBwC,KAAMwpB,GAAyB,KAAKpjB,KAAK+J,GAChEnQ,KAAKod,MAAM,QAASjN,EACxB,EAAGsa,GAAqC,SAA4Cta,GAChF,OAAQA,EAAMA,OACV,IAAK,0BAED,OADA3S,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAAMvE,EAAMjQ,KACrFiQ,EAAMjQ,KACjB,IAAK,wBACD,IAAIokB,EAAW9mB,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAC/F,IAAK4P,EACD,MAAMrlB,MAAM,yDAEhB,IAAIiB,EAAOiQ,EAAMjQ,KACjB,GAAIA,EAAKmkB,MAAO,CACZ,MAAM+I,EAAc5H,GAAG8G,gBAAgBhI,EAAUpkB,EAAKmkB,OACtD7mB,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAAM0Y,CAC1F,CACA,OAAO5vB,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAC3F,IAAK,4BACL,IAAK,yBACL,IAAK,4BACL,IAAK,0BACL,IAAK,8BACDlX,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAAMvE,EAAMjQ,KAGpG,GAAI1C,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAChF,OAAOlX,EAAuBwC,KAAMypB,GAAmC,KAAKtZ,EAAMjQ,KAAKwU,IAC3F,MAAM,IAAIzV,MAAM,wBACpB,EAAGyrB,GAAqC,SAA4Cva,EAAOmU,GACvF,IAAIuI,EAAa,GACjB,OAAQ1c,EAAMA,OACV,IAAK,yBAED,MAAO,CAACA,EAAMjQ,KAAM2sB,GACxB,IAAK,uBACD,IAAKvI,EACD,MAAMrlB,MAAM,0FAEhB,IAAIiB,EAAOiQ,EAAMjQ,KAEjB,GAAIA,EAAKmkB,MAAMvJ,QACX,IAAK,MAAMuS,KAAkBntB,EAAKmkB,MAAMvJ,QACpC,GAAIuS,EAAejhB,SAASkY,EAASxJ,QAAS,CAC1C,IAAImS,EAAiB3I,EAASxJ,QAAQuS,EAAejhB,OACrDkY,EAASxJ,QAAQuS,EAAejhB,OAAS5O,EAAuBwC,KAAMupB,GAA4B,IAAKoB,IAAoCltB,KAAKuC,KAAMqtB,EAAgBJ,EAC1K,MAEI3I,EAASxJ,QAAQuS,EAAejhB,OAASihB,EAEzCR,EAAWzmB,KAAKinB,GAI5B,MAAO,CAAC/I,EAAUuI,GACtB,IAAK,6BACL,IAAK,2BACL,IAAK,4BAED,GAAIvI,EACA,MAAO,CAACA,EAAUuI,GAGlB,MAAM5tB,MAAM,2DAGxB,MAAMA,MAAM,0CAChB,EAAG0rB,GAAqC,SAA4C0C,EAAgBJ,GAChG,OAAOzH,GAAG8G,gBAAgBW,EAAgBI,EAC9C,EAAGzC,GAA6B,SAAoCza,GAEhE,OADAnT,EAAuBgD,KAAMkqB,GAAqC/Z,EAAMjQ,MAChEiQ,EAAMA,OACV,IAAK,qBAEL,IAAK,oBAEL,IAAK,yBACD,MACJ,IAAK,6BACL,IAAK,uBACL,IAAK,oBACL,IAAK,uBACL,IAAK,qBACL,IAAK,wBACDnT,EAAuBgD,KAAM4pB,GAA2BzZ,EAAMjQ,MAC1D1C,EAAuBwC,KAAMgqB,GAAkC,OAC/DhqB,KAAKod,MAAM,eAAgB5f,EAAuBwC,KAAMgqB,GAAkC,MAC1FhtB,EAAuBgD,KAAMgqB,QAAkC7oB,IAM/E,SCthBO,cAAmBqW,GACtB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKstB,MAAQ,IAAIC,GAAevtB,KAAKyX,QACzC,CACA,MAAAK,CAAOgR,EAAU5Q,EAAQnN,GACrB,MAAMyiB,QAAEA,KAAYloB,GAAS4S,EAC7B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYoT,SAAiB,CACvDnU,MAAO,CAAE6Y,WACTloB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,UACpEkF,OAAQmT,EAAOnT,SAAU,GAEjC,CAMA,QAAAohB,CAASiD,EAAOlR,EAAQnN,GACpB,MAAMie,UAAEA,GAAc9Q,EACtB,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,YAAYsT,UAAkBI,IAAS,IAC7Dre,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,MAAAumB,CAAOgD,EAAOlR,EAAQnN,GAClB,MAAMie,UAAEA,KAAc1jB,GAAS4S,EAC/B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYsT,UAAkBI,IAAS,CACjE9jB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,IAAAuZ,CAAK0P,EAAUnU,EAAQ,CAAA,EAAI5J,GACvB,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,YAAYoT,SAAe,GAAgB,CAC3EnU,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,MAAA+E,CAAOwkB,EAAOlR,EAAQnN,GAClB,MAAMie,UAAEA,GAAc9Q,EACtB,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYsT,UAAkBI,WAAgB,IACrEre,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,mBAAM4tB,CAAc/B,EAAUpmB,EAAMyF,GAChC,MAAMqgB,QAAYprB,KAAK8X,OAAO4T,EAAUpmB,EAAMyF,GAC9C,aAAa/K,KAAK0tB,KAAKtC,EAAI1W,GAAI,CAAEsU,UAAW0C,GAAY3gB,EAC5D,CAMA,eAAA4iB,CAAgBjC,EAAUpmB,EAAMyF,GAC5B,OAAO8f,GAAgBY,sBAAsBC,EAAU1rB,KAAKyX,QAAQmW,KAAKC,QAAQ5C,KAAM3lB,EAAMyF,EACjG,CAMA,UAAM2iB,CAAK1C,EAAO9S,EAAQnN,GACtB,MAAMlL,EAAUonB,GAAa,CACzBlc,GAASlL,QACT,CACI,0BAA2B,OAC3B,mCAAoCkL,GAAS+iB,gBAAgBrvB,iBAAc0C,KAGnF,OAAa,CACT,MAAQjB,KAAMkrB,EAAGhc,SAAEA,SAAmBpP,KAAKmmB,SAAS6E,EAAO9S,EAAQ,IAC5DnN,EACHlL,QAAS,IAAKkL,GAASlL,WAAYA,KACpCqT,eACH,OAAQkY,EAAIxrB,QAER,IAAK,SACL,IAAK,cACL,IAAK,aACD,IAAImuB,EAAgB,IACpB,GAAIhjB,GAAS+iB,eACTC,EAAgBhjB,EAAQ+iB,mBAEvB,CACD,MAAME,EAAiB5e,EAASvP,QAAQnC,IAAI,wBAC5C,GAAIswB,EAAgB,CAChB,MAAMC,EAAmB1lB,SAASylB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACMhsB,EAAM8rB,GACZ,MAEJ,IAAK,kBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,SACL,IAAK,UACD,OAAO3C,EAEnB,CACJ,CAIA,MAAArmB,CAAO2mB,EAAUpmB,EAAMyF,GACnB,OAAO8f,GAAgBY,sBAAsBC,EAAU1rB,KAAKyX,QAAQmW,KAAKC,QAAQ5C,KAAM3lB,EAAMyF,EACjG,CACA,iBAAAsgB,CAAkBjC,EAAOlR,EAAQnN,GAC7B,MAAMie,UAAEA,KAAc1jB,GAAS4S,EAC/B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYsT,UAAkBI,wBAA6B,CACrF9jB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,UACpEkF,OAAQmT,EAAOnT,SAAU,GAEjC,CAMA,8BAAMopB,CAAyBnD,EAAO9S,EAAQnN,GAC1C,MAAMqgB,QAAYprB,KAAKqrB,kBAAkBL,EAAO9S,EAAQnN,GACxD,aAAa/K,KAAK0tB,KAAKtC,EAAI1W,GAAIwD,EAAQnN,EAC3C,CAMA,uBAAAqjB,CAAwBpD,EAAO9S,EAAQnN,GACnC,OAAO8f,GAAgBE,0BAA0BC,EAAOhrB,KAAKyX,QAAQmW,KAAKC,QAAQ5C,KAAM/S,EAAQnN,EACpG,GAEJsjB,GAAKpF,MAAQA,GCnKN,MAAMqF,WAAgB9W,GACzB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKirB,KAAO,IAAIsD,GAAavuB,KAAKyX,SAClCzX,KAAKwe,SAAW,IAAIyH,GAAqBjmB,KAAKyX,QAClD,CAMA,MAAAK,CAAOxS,EAAO,CAAA,EAAIyF,GACd,OAAO/K,KAAKyX,QAAQyO,KAAK,WAAY,CACjC5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,QAAAsmB,CAAS2C,EAAU/d,GACf,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,YAAYoT,IAAY,IAC9C/d,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,MAAAumB,CAAO0C,EAAUxjB,EAAMyF,GACnB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYoT,IAAY,CAClDxjB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAMA,OAAOipB,EAAU/d,GACb,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,YAAYoT,IAAY,IACjD/d,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CACA,YAAAusB,CAAa9mB,EAAMyF,GACf,OAAO/K,KAAKyX,QAAQyO,KAAK,gBAAiB,CACtC5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,UACpEkF,OAAQO,EAAKP,SAAU,GAE/B,CAMA,sBAAMypB,CAAiBlpB,EAAMyF,GACzB,MAAMqgB,QAAYprB,KAAKosB,aAAa9mB,EAAMyF,GAC1C,aAAa/K,KAAKirB,KAAKyC,KAAKtC,EAAI1W,GAAI,CAAEsU,UAAWoC,EAAIpC,WAAaje,EACtE,CAIA,kBAAA0jB,CAAmBnpB,EAAMyF,GACrB,OAAO8f,GAAgBS,4BAA4BhmB,EAAMtF,KAAKyX,QAAQmW,KAAKC,QAAS9iB,EACxF,EAEJujB,GAAQD,KAAOA,GACfC,GAAQ9H,SAAWA,GCjFZ,MAAMkI,WAAalX,GACtB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK2uB,SAAW,IAAIC,GAAqB5uB,KAAKyX,SAC9CzX,KAAK6uB,WAAa,IAAIC,GAAyB9uB,KAAKyX,SACpDzX,KAAK6tB,QAAU,IAAIkB,GAAmB/uB,KAAKyX,QAC/C,EAEJiX,GAAK7F,SAAWA,GAChB6F,GAAKrG,WAAaA,GAClBqG,GAAKJ,QAAUA,GChBR,MAAM/H,WAAoB/O,GAC7B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,eAAgB,CAAE5gB,UAASyF,EAAShG,OAAQO,EAAKP,SAAU,GACxF,ECDG,MAAMiqB,WAAgBxX,GAIzB,QAAA2O,CAAS8I,EAAQ/W,EAAQnN,GACrB,MAAMmkB,aAAEA,GAAiBhX,EACzB,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,eAAewZ,WAAsBD,YAAkB,IAC7ElkB,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,sBAAwBzc,GAASlL,UAClEkS,kBAAkB,GAE1B,SCPG,cAAoByF,GACvB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK8a,QAAU,IAAIqU,GAAmBnvB,KAAKyX,QAC/C,CAOA,MAAAK,CAAOsX,EAAa9pB,EAAMyF,GACtB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,eAAe0Z,UAAqBvZ,GAA4B,CAAEvQ,UAASyF,GAAW/K,KAAKyX,SAC7H,CAIA,QAAA0O,CAAS8I,EAAQ/W,EAAQnN,GACrB,MAAMmkB,aAAEA,GAAiBhX,EACzB,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,eAAewZ,WAAsBD,IAAUlkB,EAChF,CAIA,IAAAqO,CAAKgW,EAAaza,EAAQ,CAAA,EAAI5J,GAC1B,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,eAAe0Z,UAAmB,GAAgB,CAClFza,WACG5J,GAEX,CAIA,OAAOkkB,EAAQ/W,EAAQnN,GACnB,MAAMmkB,aAAEA,GAAiBhX,EACzB,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,eAAewZ,WAAsBD,IAAU,IACxElkB,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,OAASzc,GAASlL,WAE3D,GAEJwvB,GAAML,QAAUA,GC1CT,MAAMM,WAAmB9X,GAC5B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKuvB,MAAQ,IAAIC,GAAexvB,KAAKyX,QACzC,CAIA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,cAAe,CAAE5gB,UAASyF,GACvD,CAIA,QAAAob,CAASiJ,EAAarkB,GAClB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,eAAe0Z,IAAerkB,EAC/D,CAIA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,cAAa,GAAgB,CAAE3E,WAAU5J,GAC5E,CAIA,OAAOqkB,EAAarkB,GAChB,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,eAAe0Z,IAAe,IACvDrkB,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,OAASzc,GAASlL,WAE3D,EAEJyvB,GAAWD,MAAQA,GCpCZ,MAAMI,WAAcjY,GAIvB,MAAAM,CAAO4X,EAAgBxX,EAAQnN,GAC3B,MAAMyiB,QAAEA,KAAYloB,GAAS4S,EAC7B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBga,UAAwB,CACpE/a,MAAO,CAAE6Y,WACTloB,UACGyF,GAEX,CAIA,QAAAob,CAASwJ,EAAQzX,EAAQnN,GACrB,MAAM6kB,gBAAEA,KAAoBjb,GAAUuD,EACtC,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,kBAAkBka,WAAyBD,IAAU,CAAEhb,WAAU5J,GAClG,CAIA,IAAAqO,CAAKsW,EAAgB/a,EAAQ,CAAA,EAAI5J,GAC7B,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,kBAAkBga,UAAsB,GAA4B,CAAE/a,WAAU5J,GACxH,CAIA,OAAO4kB,EAAQzX,EAAQnN,GACnB,MAAM6kB,gBAAEA,GAAoB1X,EAC5B,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,kBAAkBka,WAAyBD,IAAU5kB,EACzF,EC9BG,MAAM8kB,WAAsBrY,GAC/B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK8vB,MAAQ,IAAIC,GAAe/vB,KAAKyX,QACzC,CAIA,MAAAK,CAAOxS,EAAO,CAAA,EAAIyF,GACd,OAAO/K,KAAKyX,QAAQyO,KAAK,iBAAkB,CAAE5gB,UAASyF,GAC1D,CAIA,QAAAob,CAASuJ,EAAgB3kB,GACrB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,kBAAkBga,IAAkB3kB,EACrE,CAIA,MAAAqb,CAAOsJ,EAAgBpqB,EAAMyF,GACzB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBga,IAAkB,CAAEpqB,UAASyF,GACjF,CAIA,OAAO2kB,EAAgB3kB,GACnB,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,kBAAkBga,IAAkB3kB,EACxE,EAEJ8kB,GAAcJ,MAAQA,GChCf,MAAMO,WAAmBxY,GAa5B,MAAAM,CAAOxS,EAAMyF,GACT,MAAMklB,IAAkC3qB,EAAK4qB,gBAG7C,IAAIA,EAAkBD,EAAgC3qB,EAAK4qB,gBAAkB,SACzED,GACApiB,GAAU7N,KAAKyX,SAASjK,MAAM,2CAA4ClI,EAAK4qB,iBAEnF,MAAM9gB,EAAWpP,KAAKyX,QAAQyO,KAAK,cAAe,CAC9C5gB,KAAM,IACCA,EACH4qB,gBAAiBA,MAElBnlB,IAGP,OAAIklB,EACO7gB,GAMXvB,GAAU7N,KAAKyX,SAASjK,MAAM,qDACvB4B,EAAS0D,aAAa1D,IACrBA,GAAYA,EAASlP,MACrBkP,EAASlP,KAAK+d,SAASkS,IACnB,MAAMC,EAAqBD,EAAmBE,UAC9CF,EAAmBE,UZPT,CAACC,IAC3B,GAAsB,oBAAXC,OAAwB,CAE/B,MAAMC,EAAMD,OAAOE,KAAKH,EAAW,UACnC,OAAO3uB,MAAM8uB,KAAK,IAAIC,aAAaF,EAAItkB,OAAQskB,EAAIG,WAAYH,EAAI9pB,OAASgqB,aAAaE,mBAC7F,CACK,CAED,MAAMC,EAAYC,KAAKR,GACjBS,EAAMF,EAAUnqB,OAChB6E,EAAQ,IAAIrN,WAAW6yB,GAC7B,IAAK,IAAI5qB,EAAI,EAAGA,EAAI4qB,EAAK5qB,IACrBoF,EAAMpF,GAAK0qB,EAAUjoB,WAAWzC,GAEpC,OAAOxE,MAAM8uB,KAAK,IAAIC,aAAanlB,EAAMW,QAC7C,GYR+C8kB,CAAeZ,EAAmB,IAGlEhhB,KAEf,EC7CG,MAAM6hB,WAAoBzZ,GAI7B,QAAA2O,CAAS+K,EAAchZ,EAAQnN,GAC3B,MAAMomB,QAAEA,EAAOhI,OAAEA,GAAWjR,EAC5B,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,UAAUyb,UAAgBhI,kBAAuB+H,IAAgBnmB,EAClG,CAIA,IAAAqO,CAAKgQ,EAAOlR,EAAQnN,GAChB,MAAMomB,QAAEA,KAAYxc,GAAUuD,EAC9B,OAAOlY,KAAKyX,QAAQ6B,WAAW5D,EAAK,UAAUyb,UAAgB/H,iBAAoB,GAAgB,CAAEzU,WAAU5J,GAClH,ECZG,MAAMsjB,WAAa7W,GACtB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKoxB,YAAc,IAAIC,GAA2BrxB,KAAKyX,QAC3D,CAMA,MAAAK,CAAOwZ,EAAQhsB,EAAMyF,GACjB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,UAAU4b,SAAe,CAAEhsB,UAASyF,GACtE,CAIA,QAAAob,CAASiD,EAAOlR,EAAQnN,GACpB,MAAMomB,QAAEA,GAAYjZ,EACpB,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,UAAUyb,UAAgB/H,IAASre,EACpE,CAIA,IAAAqO,CAAKkY,EAAQ3c,EAAQ,CAAA,EAAI5J,GACrB,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,UAAU4b,SAAa,GAAgB,CACvE3c,WACG5J,GAEX,CAIA,OAAOqe,EAAOlR,EAAQnN,GAClB,MAAMomB,QAAEA,GAAYjZ,EACpB,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,UAAUyb,UAAgB/H,IAASre,EACvE,CAIA,MAAAnG,CAAOwkB,EAAOlR,EAAQnN,GAClB,MAAMomB,QAAEA,GAAYjZ,EACpB,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,UAAUyb,UAAgB/H,IAASre,EACrE,EAEJsjB,GAAK4C,YAAcA,GC5CZ,MAAMM,WAAc/Z,GACvB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKirB,KAAO,IAAIsD,GAAavuB,KAAKyX,QACtC,CASA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,SAAU,CAAE5gB,UAASyF,GAClD,CAIA,QAAAob,CAASmL,EAAQvmB,GACb,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,UAAU4b,IAAUvmB,EACrD,CAIA,MAAAqb,CAAOkL,EAAQhsB,EAAMyF,GACjB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,UAAU4b,IAAU,CAAEhsB,UAASyF,GACjE,CAIA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,SAAQ,GAAgB,CAAE3E,WAAU5J,GACvE,CAIA,OAAOumB,EAAQvmB,GACX,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,UAAU4b,IAAUvmB,EACxD,EAEJwmB,GAAMlD,KAAOA,UCvCN,cAAoB7W,GAwBvB,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,SAAUrQ,GAA4B,CAAEvQ,UAASyF,GAAW/K,KAAKyX,SAC9F,CAIA,QAAA0O,CAAS8I,EAAQlkB,GACb,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,UAAUuZ,IAAUlkB,EACrD,CAIA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,SAAQ,GAAgB,CAAE3E,WAAU5J,GACvE,CAIA,OAAOkkB,EAAQlkB,GACX,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,UAAUuZ,IAAUlkB,EACxD,CAIA,OAAA+P,CAAQmU,EAAQlkB,GACZ,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,UAAUuZ,YAAkB,IAClDlkB,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,sBAAwBzc,GAASlL,UAClEkS,kBAAkB,GAE1B,CAIA,uBAAMyf,CAAkB9c,GAAI+c,aAAEA,EAAe,IAAIC,QAAEA,EAAU,MAAmB,IAC5E,MAAMC,EAAkB,IAAIzkB,IAAI,CAAC,YAAa,QAAS,YACjD3I,EAAQ4E,KAAKqJ,MACnB,IAAIof,QAAa5xB,KAAKmmB,SAASzR,GAC/B,MAAQkd,EAAKhyB,SAAW+xB,EAAgBt0B,IAAIu0B,EAAKhyB,SAG7C,SAFMqC,EAAMwvB,GACZG,QAAa5xB,KAAKmmB,SAASzR,GACvBvL,KAAKqJ,MAAQjO,EAAQmtB,EACrB,MAAM,IAAItwB,EAA0B,CAChCtC,QAAS,iCAAiC4V,gCAAiCgd,oBAIvF,OAAOE,CACX,GC9EG,MAAMC,WAAgBra,WCAtB,cAAsBA,GAkBzB,GAAA4T,CAAI9lB,EAAMyF,GACN,OAAO/K,KAAKyX,QAAQyO,KAAK,iCAAkC,CAAE5gB,UAASyF,GAC1E,CAkBA,QAAA+mB,CAASxsB,EAAMyF,GACX,OAAO/K,KAAKyX,QAAQyO,KAAK,sCAAuC,CAAE5gB,UAASyF,GAC/E,GCtCG,MAAMgnB,WAAcva,GACvB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKgyB,QAAU,IAAIC,GAAmBjyB,KAAKyX,QAC/C,EAEJsa,GAAMG,QAAUA,GCNT,MAAMC,WAAoB3a,GAkB7B,MAAAM,CAAOsa,EAA0B9sB,EAAMyF,GACnC,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,4BAA4B0c,gBAAsC,GAAU,CAAE9sB,OAAM+sB,OAAQ,UAAWtnB,GAC/I,CAeA,QAAAob,CAASiM,EAA0Bzd,EAAQ,CAAA,EAAI5J,GAC3C,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,4BAA4B0c,gBAAwC,CAC7Fzd,WACG5J,GAEX,CAmBA,OAAOunB,EAAcpa,EAAQnN,GACzB,MAAMwnB,4BAAEA,GAAgCra,EACxC,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,4BAA4B6c,iBAA2CD,IAAgBvnB,EAC3H,SC9DG,cAA0ByM,GAC7B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKwyB,YAAc,IAAIC,GAA2BzyB,KAAKyX,QAC3D,GAEJib,GAAYP,YAAcA,GCNnB,MAAMO,WAAoBlb,GAc7B,IAAA4B,CAAKuZ,EAAiBhe,EAAQ,CAAA,EAAI5J,GAC9B,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,qBAAqBid,gBAA6B,GAAgB,CAAEhe,WAAU5J,GACtH,ECdG,MAAM6nB,WAAapb,GACtB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK6yB,YAAc,IAAIC,GAA2B9yB,KAAKyX,QAC3D,CAkBA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,oBAAqB,CAAE5gB,UAASyF,GAC7D,CAaA,QAAAob,CAASwM,EAAiB5nB,GACtB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,qBAAqBid,IAAmB5nB,EACzE,CAYA,IAAAqO,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,oBAAmB,GAAgB,CAAE3E,WAAU5J,GAClF,CAWA,MAAAnG,CAAO+tB,EAAiB5nB,GACpB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,qBAAqBid,WAA0B5nB,EACjF,CAcA,UAAAgoB,CAAWJ,EAAiBhe,EAAQ,CAAA,EAAI5J,GACpC,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,qBAAqBid,WAAwB,GAAgB,CAAEhe,WAAU5J,GACjH,CAWA,KAAAioB,CAAML,EAAiB5nB,GACnB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,qBAAqBid,UAAyB5nB,EAChF,CAWA,MAAAkoB,CAAON,EAAiB5nB,GACpB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,qBAAqBid,WAA0B5nB,EACjF,EAEJ6nB,GAAKF,YAAcA,GC1GZ,MAAMQ,WAAmB1b,GAC5B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKmzB,QAAU,IAAIC,GAAmBpzB,KAAKyX,SAC3CzX,KAAKqzB,KAAO,IAAIC,GAAatzB,KAAKyX,SAClCzX,KAAK6yB,YAAc,IAAIC,GAA2B9yB,KAAKyX,SACvDzX,KAAKuzB,MAAQ,IAAIC,GAAexzB,KAAKyX,QACzC,EAEJyb,GAAWrB,QAAUA,GACrBqB,GAAWN,KAAOA,GAClBM,GAAWR,YAAcA,GACzBQ,GAAWnB,MAAQA,GCpBZ,MAAM0B,WAAqBjc,ICE3B,MAAM0a,WAAgB1a,GACzB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAK0zB,aAAe,IAAIC,GAA6B3zB,KAAKyX,QAC9D,EAEJya,GAAQuB,aAAeA,GCPhB,MAAMG,WAAepc,GAWxB,eAAAqc,CAAgBvuB,EAAMyF,GAClB,OAAO/K,KAAKyX,QAAQyO,KAAK,qBAAsBrQ,GAA4B,CAAEvQ,UAASyF,GAAW/K,KAAKyX,SAC1G,CACA,IAAAqc,CAAKxuB,EAAMyF,GACP,OAAO/K,KAAKyX,QAAQyO,KAAK,gBAAiBrQ,GAA4B,CAAEvQ,UAASyF,EAAShG,OAAQO,EAAKP,SAAU,GAAS/E,KAAKyX,SACnI,CACA,QAAAlX,CAAS+E,EAAMyF,GACX,OAAO/K,KAAKyX,QAAQyO,KAAK,sBAAuB,CAAE5gB,UAASyF,EAAShG,OAAQO,EAAKP,SAAU,GAC/F,EClBG,MAAMgvB,WAAevc,GAKxB,QAAA2O,CAASrB,EAAO/Z,GACZ,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,WAAWoP,IAAS/Z,EACrD,CAKA,IAAAqO,CAAKrO,GACD,OAAO/K,KAAKyX,QAAQ6B,WAAW,UAAS,GAAUvO,EACtD,CAKA,OAAO+Z,EAAO/Z,GACV,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,WAAWoP,IAAS/Z,EACxD,ECvBG,MAAMipB,WAAoBxc,GAK7B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,eAAgB,CAAE5gB,UAASyF,GACxD,ECPG,MAAMkpB,WAAsBzc,GAI/B,MAAAM,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,2BAA4B,CAAE5gB,UAASyF,GACpE,ECJG,MAAM8d,WAAiBrR,GAC1B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKk0B,cAAgB,IAAIC,GAA+Bn0B,KAAKyX,QACjE,ECNG,SAAS2c,GAAmBhlB,EAAU8I,GACzC,OAAKA,GAqFF,SAA+BA,GAClC,GAAIwB,GAA6BxB,EAAO5F,MAAMnK,QAC1C,OAAO,EAEX,OAAO,CACX,CA1FoB+S,CAAsBhD,GA0B/BrF,GAAczD,EAAU8I,GAzBpB,IACA9I,EACHilB,cAAe,KACfloB,OAAQiD,EAASjD,OAAOyC,KAAKwF,GACP,kBAAdA,EAAK/T,KACE,IACA+T,EACHoG,iBAAkB,MAGR,YAAdpG,EAAK/T,KACE,IACA+T,EACH0G,QAAS1G,EAAK0G,QAAQlM,KAAKkM,IAAO,IAC3BA,EACHD,OAAQ,UAKTzG,IAM3B,CACO,SAASvB,GAAczD,EAAU8I,GACpC,MAAM/L,EAASiD,EAASjD,OAAOyC,KAAKwF,IAChC,GAAkB,kBAAdA,EAAK/T,KACL,MAAO,IACA+T,EACHoG,iBAAkBI,GAAc1C,EAAQ9D,IAGhD,GAAkB,YAAdA,EAAK/T,KAAoB,CACzB,MAAMya,EAAU1G,EAAK0G,QAAQlM,KAAKkM,GACT,gBAAjBA,EAAQza,KACD,IACAya,EACHD,OAAQyZ,GAAgBpc,EAAQ4C,EAAQxI,OAGzCwI,IAEX,MAAO,IACA1G,EACH0G,UAER,CACA,OAAO1G,CAAI,IAETyG,EAAS3b,OAAO0mB,OAAO,CAAA,EAAIxW,EAAU,CAAEjD,WAoB7C,OAnBKjN,OAAOq1B,yBAAyBnlB,EAAU,gBAC3ColB,GAAc3Z,GAElB3b,OAAOuT,eAAeoI,EAAQ,gBAAiB,CAC3CnI,YAAY,EACZ,GAAAhV,GACI,IAAK,MAAMyO,KAAU0O,EAAO1O,OACxB,GAAoB,YAAhBA,EAAO9L,KAGX,IAAK,MAAMya,KAAW3O,EAAO2O,QACzB,GAAqB,gBAAjBA,EAAQza,MAA6C,OAAnBya,EAAQD,OAC1C,OAAOC,EAAQD,OAI3B,OAAO,IACX,IAEGA,CACX,CACA,SAASyZ,GAAgBpc,EAAQ4C,GAC7B,GAAkC,gBAA9B5C,EAAO5F,MAAMnK,QAAQ9H,KACrB,OAAO,KAEX,GAAI,cAAe6X,EAAO5F,MAAMnK,OAAQ,CACpC,MAAMssB,EAAcvc,EAAO5F,MAAMnK,OACjC,OAAOssB,EAAYha,UAAUK,EACjC,CACA,OAAOvb,KAAK6Q,MAAM0K,EACtB,CA+BA,SAASF,GAAc1C,EAAQkC,GAC3B,MAAMC,GAJkBqa,EAIaxc,EAAOoC,OAAS,GAJhB1b,EAIoBwb,EAASxb,KAH3D81B,EAAYna,MAAMf,GAAuB,aAAdA,EAAKnZ,MAAuBmZ,EAAK5a,OAASA,KADhF,IAA4B81B,EAAa91B,EAHN4a,EAQ/B,MAAO,IACAY,KACAA,EACHI,kBAX2BhB,EAWUa,EAVb,wBAArBb,GAAe,OAUgCa,EAAUI,UAAUL,EAASM,WACzEL,GAAWM,OAASpb,KAAK6Q,MAAMgK,EAASM,WACpC,MAElB,CAkBO,SAAS8Z,GAAcG,GAC1B,MAAMC,EAAQ,GACd,IAAK,MAAMzoB,KAAUwoB,EAAIxoB,OACrB,GAAoB,YAAhBA,EAAO9L,KAGX,IAAK,MAAMya,KAAW3O,EAAO2O,QACJ,gBAAjBA,EAAQza,MACRu0B,EAAMxuB,KAAK0U,EAAQxI,MAI/BqiB,EAAIE,YAAcD,EAAM9rB,KAAK,GACjC,CC9JA,IAAIgsB,GAA2BC,GAAwBC,GAAyCC,GAA+BC,GAA8BC,GAA0BC,GAA4BC,GFUnNxM,GAASoL,cAAgBA,GELlB,MAAMqB,WAAuBxY,GAChC,WAAAnd,CAAYuY,GACRpY,QACAg1B,GAA0B/X,IAAI/c,MAC9B+0B,GAAuBx3B,IAAIyC,UAAM,GACjCg1B,GAAwCz3B,IAAIyC,UAAM,GAClDi1B,GAA8B13B,IAAIyC,UAAM,GACxChD,EAAuBgD,KAAM+0B,GAAwB7c,EACzD,CACA,qBAAOqd,CAAe3nB,EAAQsK,EAAQnN,GAClC,MAAMoW,EAAS,IAAImU,GAAepd,GAKlC,OAJAiJ,EAAOlE,MAAK,IAAMkE,EAAOqU,0BAA0B5nB,EAAQsK,EAAQ,IAC5DnN,EACHlL,QAAS,IAAKkL,GAASlL,QAAS,4BAA6B,cAE1DshB,CACX,CACA,+BAAMqU,CAA0B5nB,EAAQsK,EAAQnN,GAC5C,MAAM0U,EAAS1U,GAAS0U,OAOxB,IAAI1a,EANA0a,IACIA,EAAOjC,SACPxd,KAAKyE,WAAWgL,QACpBgQ,EAAOC,iBAAiB,SAAS,IAAM1f,KAAKyE,WAAWgL,WAE3DjS,EAAuBwC,KAAM80B,GAA2B,IAAKI,IAA8Bz3B,KAAKuC,MAEhG,IAAIy1B,EAAiB,KACjB,gBAAiBvd,GACjBnT,QAAe6I,EAAO8nB,UAAUvP,SAASjO,EAAOyd,YAAa,CAAE5wB,QAAQ,GAAQ,IAAKgG,EAAS0U,OAAQzf,KAAKyE,WAAWgb,OAAQ1a,QAAQ,IACrI0wB,EAAiBvd,EAAOud,gBAAkB,MAG1C1wB,QAAe6I,EAAO8nB,UAAU5d,OAAO,IAAKI,EAAQnT,QAAQ,GAAQ,IAAKgG,EAAS0U,OAAQzf,KAAKyE,WAAWgb,SAE9Gzf,KAAKqd,aACL,UAAW,MAAMlN,KAASpL,EACtBvH,EAAuBwC,KAAM80B,GAA2B,IAAKK,IAA0B13B,KAAKuC,KAAMmQ,EAAOslB,GAE7G,GAAI1wB,EAAON,WAAWgb,QAAQjC,QAC1B,MAAM,IAAItc,EAEd,OAAO1D,EAAuBwC,KAAM80B,GAA2B,IAAKM,IAA4B33B,KAAKuC,KACzG,CACA,EAAE+0B,GAAyB,IAAIlqB,QAAWmqB,GAA0C,IAAInqB,QAAWoqB,GAAgC,IAAIpqB,QAAWiqB,GAA4B,IAAI3W,QAAW+W,GAA+B,WACpNl1B,KAAKsd,OAETtgB,EAAuBgD,KAAMg1B,QAAyC7zB,EAC1E,EAAGg0B,GAA2B,SAAkChlB,EAAOslB,GACnE,GAAIz1B,KAAKsd,MACL,OACJ,MAAMsY,EAAY,CAACh3B,EAAMuR,MACC,MAAlBslB,GAA0BtlB,EAAM0lB,gBAAkBJ,IAClDz1B,KAAKod,MAAMxe,EAAMuR,EACrB,EAEEf,EAAW5R,EAAuBwC,KAAM80B,GAA2B,IAAKO,IAAoC53B,KAAKuC,KAAMmQ,GAE7H,OADAylB,EAAU,QAASzlB,GACXA,EAAM9P,MACV,IAAK,6BAA8B,CAC/B,MAAM8L,EAASiD,EAASjD,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAE3D,GAAoB,YAAhB3pB,EAAO9L,KAAoB,CAC3B,MAAMya,EAAU3O,EAAO2O,QAAQ3K,EAAM4lB,eACrC,IAAKjb,EACD,MAAM,IAAIrb,EAAY,4BAA4B0Q,EAAM4lB,iBAE5D,GAAqB,gBAAjBjb,EAAQza,KACR,MAAM,IAAIZ,EAAY,6CAA6Cqb,EAAQza,QAE/Eu1B,EAAU,6BAA8B,IACjCzlB,EACHmU,SAAUxJ,EAAQxI,MAE1B,CACA,KACJ,CACA,IAAK,yCAA0C,CAC3C,MAAMnG,EAASiD,EAASjD,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAEvC,kBAAhB3pB,EAAO9L,MACPu1B,EAAU,yCAA0C,IAC7CzlB,EACHmU,SAAUnY,EAAOuO,YAGzB,KACJ,CACA,QACIkb,EAAUzlB,EAAM9P,KAAM8P,GAGlC,EAAGilB,GAA6B,WAC5B,GAAIp1B,KAAKsd,MACL,MAAM,IAAI7d,EAAY,2CAE1B,MAAM6kB,EAAW9mB,EAAuBwC,KAAMg1B,GAAyC,KACvF,IAAK1Q,EACD,MAAM,IAAI7kB,EAAY,4CAE1BzC,EAAuBgD,KAAMg1B,QAAyC7zB,GACtE,MAAM60B,EAoJd,SAA0B1R,EAAUpM,GAChC,OAAOkc,GAAmB9P,EAAUpM,EACxC,CAtJ+B+d,CAAiB3R,EAAU9mB,EAAuBwC,KAAM+0B,GAAwB,MAEvG,OADA/3B,EAAuBgD,KAAMi1B,GAA+Be,GACrDA,CACX,EAAGX,GAAqC,SAA4CllB,GAChF,IAAImU,EAAW9mB,EAAuBwC,KAAMg1B,GAAyC,KACrF,IAAK1Q,EAAU,CACX,GAAmB,qBAAfnU,EAAM9P,KACN,MAAM,IAAIZ,EAAY,6EAA6E0Q,EAAM9P,QAG7G,OADAikB,EAAWtnB,EAAuBgD,KAAMg1B,GAAyC7kB,EAAMf,UAChFkV,CACX,CACA,OAAQnU,EAAM9P,MACV,IAAK,6BACDikB,EAASnY,OAAO/F,KAAK+J,EAAMiE,MAC3B,MAEJ,IAAK,8BAA+B,CAChC,MAAMjI,EAASmY,EAASnY,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAE3D,MAAMz1B,EAAO8L,EAAO9L,KACd61B,EAAO/lB,EAAM+lB,KACN,YAAT71B,GAAoC,mBAAd61B,EAAK71B,KAC3B8L,EAAO2O,QAAQ1U,KAAK8vB,GAEN,cAAT71B,GAAsC,mBAAd61B,EAAK71B,OAC7B8L,EAAO2O,UACR3O,EAAO2O,QAAU,IAErB3O,EAAO2O,QAAQ1U,KAAK8vB,IAExB,KACJ,CACA,IAAK,6BAA8B,CAC/B,MAAM/pB,EAASmY,EAASnY,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAE3D,GAAoB,YAAhB3pB,EAAO9L,KAAoB,CAC3B,MAAMya,EAAU3O,EAAO2O,QAAQ3K,EAAM4lB,eACrC,IAAKjb,EACD,MAAM,IAAIrb,EAAY,4BAA4B0Q,EAAM4lB,iBAE5D,GAAqB,gBAAjBjb,EAAQza,KACR,MAAM,IAAIZ,EAAY,6CAA6Cqb,EAAQza,QAE/Eya,EAAQxI,MAAQnC,EAAMkU,KAC1B,CACA,KACJ,CACA,IAAK,yCAA0C,CAC3C,MAAMlY,EAASmY,EAASnY,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAEvC,kBAAhB3pB,EAAO9L,OACP8L,EAAOuO,WAAavK,EAAMkU,OAE9B,KACJ,CACA,IAAK,gCAAiC,CAClC,MAAMlY,EAASmY,EAASnY,OAAOgE,EAAM2lB,cACrC,IAAK3pB,EACD,MAAM,IAAI1M,EAAY,2BAA2B0Q,EAAM2lB,gBAE3D,GAAoB,cAAhB3pB,EAAO9L,KAAsB,CAC7B,MAAMya,EAAU3O,EAAO2O,UAAU3K,EAAM4lB,eACvC,IAAKjb,EACD,MAAM,IAAIrb,EAAY,4BAA4B0Q,EAAM4lB,iBAE5D,GAAqB,mBAAjBjb,EAAQza,KACR,MAAM,IAAIZ,EAAY,gDAAgDqb,EAAQza,QAElFya,EAAQxI,MAAQnC,EAAMkU,KAC1B,CACA,KACJ,CACA,IAAK,qBACDrnB,EAAuBgD,KAAMg1B,GAAyC7kB,EAAMf,UAIpF,OAAOkV,CACX,EAAGlgB,OAAOC,kBACN,MAAMyhB,EAAY,GACZC,EAAY,GAClB,IAAIlpB,GAAO,EA+BX,OA9BAmD,KAAKyd,GAAG,SAAUtN,IACd,MAAMnL,EAAS+gB,EAAUjV,QACrB9L,EACAA,EAAO5I,QAAQ+T,GAGf2V,EAAU1f,KAAK+J,EACnB,IAEJnQ,KAAKyd,GAAG,OAAO,KACX5gB,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO5I,aAAQ+E,GAEnB4kB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAExB1G,KAAKyd,GAAG,SAAU9e,IACd9B,GAAO,EACP,IAAK,MAAMmI,KAAU+gB,EACjB/gB,EAAO3I,OAAOsC,GAElBonB,EAAUrf,OAAS,CAAC,IAEjB,CACHjK,KAAM8S,UACF,IAAKuW,EAAUpf,OACX,OAAI7J,EACO,CAAEN,WAAO4E,EAAWtE,MAAM,GAE9B,IAAIV,SAAQ,CAACC,EAASC,IAAW0pB,EAAU3f,KAAK,CAAEhK,UAASC,aAAWS,MAAMqT,GAAWA,EAAQ,CAAE5T,MAAO4T,EAAOtT,MAAM,GAAU,CAAEN,WAAO4E,EAAWtE,MAAM,KAGpK,MAAO,CAAEN,MADKupB,EAAUhV,QACDjU,MAAM,EAAO,EAExCgI,OAAQ0K,UACJvP,KAAKyP,QACE,CAAElT,WAAO4E,EAAWtE,MAAM,IAG7C,CAKA,mBAAMs5B,SACIn2B,KAAKnD,OACX,MAAMuS,EAAW5R,EAAuBwC,KAAMi1B,GAA+B,KAC7E,IAAK7lB,EACD,MAAM,IAAI3P,EAAY,mDAC1B,OAAO2P,CACX,EC3PG,MAAMgnB,WAAmB5e,GAc5B,IAAA4B,CAAKid,EAAY1hB,EAAQ,CAAA,EAAI5J,GACzB,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,cAAc2gB,gBAAwB,GAAgB,CAAE1hB,WAAU5J,GAC1G,ECZG,MAAMurB,WAAkB9e,GAC3B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKu2B,WAAa,IAAIC,GAAyBx2B,KAAKyX,QACxD,CACA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,aAAc,CAAE5gB,UAASyF,EAAShG,OAAQO,EAAKP,SAAU,IAAS+N,aAAa6hB,IAChG,WAAYA,GAAsB,aAAfA,EAAInrB,QACvBgrB,GAAcG,GAEXA,IAEf,CACA,QAAAxO,CAASkQ,EAAY1hB,EAAQ,CAAA,EAAI5J,GAC7B,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,cAAc2gB,IAAc,CACrD1hB,WACG5J,EACHhG,OAAQ4P,GAAO5P,SAAU,IAC1B+N,aAAa6hB,IACR,WAAYA,GAAsB,aAAfA,EAAInrB,QACvBgrB,GAAcG,GAEXA,IAEf,CAWA,OAAO0B,EAAYtrB,GACf,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,cAAc2gB,IAAc,IACrDtrB,EACHlL,QAASonB,GAAa,CAAC,CAAEO,OAAQ,OAASzc,GAASlL,WAE3D,CACA,KAAAuQ,CAAM9K,EAAMyF,GACR,OAAO/K,KAAKyX,QAAQie,UACf5d,OAAOxS,EAAMyF,GACb+H,aAAa1D,GAAayD,GAAczD,EAAU9J,IAC3D,CAIA,MAAAP,CAAOO,EAAMyF,GACT,OAAOuqB,GAAeC,eAAev1B,KAAKyX,QAASnS,EAAMyF,EAC7D,CAaA,MAAAnG,CAAOyxB,EAAYtrB,GACf,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,cAAc2gB,WAAqBtrB,EACrE,EAEJurB,GAAUF,WAAaA,GCxEhB,MAAMK,WAAcjf,GAcvB,MAAAM,CAAO4e,EAAUpxB,EAAMyF,GACnB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYghB,UAAkB7gB,GAA4B,CAAEvQ,UAASyF,GAAW/K,KAAKyX,SACvH,ECfG,MAAMkf,WAAgBnf,GACzB,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKoX,MAAQ,IAAIwf,GAAe52B,KAAKyX,QACzC,CAsBA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,WAAY,CAAE5gB,UAASyF,GACpD,CAIA,MAAAnG,CAAO8xB,EAAU3rB,GACb,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYghB,WAAmB3rB,EACjE,CAgBA,QAAA8rB,CAASH,EAAUpxB,EAAMyF,GACrB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,YAAYghB,aAAqB,CAAEpxB,UAASyF,GAC9E,EAEJ4rB,GAAQF,MAAQA,GCpDT,MAAMK,WAAoBtf,GAI7B,MAAAM,CAAOif,EAAezxB,EAAMyF,GACxB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBqhB,iBAA8B,CAC1EzxB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,QAAAsmB,CAASiC,EAASlQ,EAAQnN,GACtB,MAAMisB,gBAAEA,GAAoB9e,EAC5B,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,kBAAkBshB,kBAAgC5O,IAAW,IACnFrd,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAKA,MAAA+E,CAAOwjB,EAASlQ,EAAQnN,GACpB,MAAMisB,gBAAEA,GAAoB9e,EAC5B,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBshB,kBAAgC5O,WAAkB,IAC3Frd,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,mBAAM4tB,CAAcwJ,EAAe3xB,EAAMyF,GACrC,MAAMmsB,QAAcl3B,KAAK8X,OAAOmf,EAAe3xB,GAC/C,aAAatF,KAAK0tB,KAAKuJ,EAAeC,EAAMxiB,GAAI3J,EACpD,CAIA,SAAAosB,CAAU/O,EAASlQ,EAAQnN,GACvB,MAAMisB,gBAAEA,KAAoBriB,GAAUuD,EACtC,OAAOlY,KAAKyX,QAAQ6B,WAAW5D,EAAK,kBAAkBshB,kBAAgC5O,UAAe,GAAgB,CAAEzT,WAAU5J,EAASlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAClN,CAOA,UAAM6tB,CAAKqJ,EAAe3O,EAASrd,GAC/B,MAAMlL,EAAUonB,GAAa,CACzBlc,GAASlL,QACT,CACI,0BAA2B,OAC3B,mCAAoCkL,GAAS+iB,gBAAgBrvB,iBAAc0C,KAGnF,OAAa,CACT,MAAQjB,KAAMg3B,EAAK9nB,SAAEA,SAAmBpP,KAAKmmB,SAASiC,EAAS,CAAE4O,gBAAiBD,GAAiB,IAC5FhsB,EACHlL,YACDqT,eACH,OAAQgkB,EAAMt3B,QACV,IAAK,cACD,IAAImuB,EAAgB,IACpB,GAAIhjB,GAAS+iB,eACTC,EAAgBhjB,EAAQ+iB,mBAEvB,CACD,MAAME,EAAiB5e,EAASvP,QAAQnC,IAAI,wBAC5C,GAAIswB,EAAgB,CAChB,MAAMC,EAAmB1lB,SAASylB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACMhsB,EAAM8rB,GACZ,MACJ,IAAK,SACL,IAAK,YACL,IAAK,YACD,OAAOmJ,EAEnB,CACJ,CAMA,mBAAME,CAAcH,GAAe1H,MAAEA,EAAK8H,QAAEA,EAAU,IAAMtsB,GACxD,GAAa,MAATwkB,GAAiC,GAAhBA,EAAM7oB,OACvB,MAAM,IAAIzH,MAAM,8GAEpB,MAAMq4B,EAAwBvsB,GAASwsB,gBAAkB,EAEnDC,EAAmBn5B,KAAKo5B,IAAIH,EAAuB/H,EAAM7oB,QACzDkH,EAAS5N,KAAKyX,QACdigB,EAAenI,EAAMllB,SACrBstB,EAAa,IAAIN,GAUvB,MAAMO,EAAUj2B,MAAM61B,GAAkBK,KAAKH,GAAc9oB,KAP3DW,eAA4BjL,GACxB,IAAK,IAAI8P,KAAQ9P,EAAU,CACvB,MAAMwzB,QAAgBlqB,EAAO2hB,MAAMzX,OAAO,CAAE8Z,KAAMxd,EAAM2jB,QAAS,cAAgBhtB,GACjF4sB,EAAWvxB,KAAK0xB,EAAQpjB,GAC5B,CACJ,IAKA,YCxH2BnF,OAAOyoB,IACtC,MAAMC,QAAgB97B,QAAQ+7B,WAAWF,GACnCr7B,EAAWs7B,EAAQtuB,QAAQ/M,GAA6B,aAAlBA,EAAOgD,SACnD,GAAIjD,EAAS+J,OAAQ,CACjB,IAAK,MAAM9J,KAAUD,EACjB2S,QAAQlQ,MAAMxC,EAAOu7B,QAEzB,MAAM,IAAIl5B,MAAM,GAAGtC,EAAS+J,kDAChC,CAEA,MAAM2D,EAAS,GACf,IAAK,MAAMzN,KAAUq7B,EACK,cAAlBr7B,EAAOgD,QACPyK,EAAOjE,KAAKxJ,EAAOL,OAG3B,OAAO8N,CAAM,EDuGH+tB,CAAoBR,SACb53B,KAAKytB,cAAcwJ,EAAe,CAC3CoB,SAAUV,GAElB,EExHG,MAAMtI,WAAc7X,GAMvB,MAAAM,CAAOif,EAAezxB,EAAMyF,GACxB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBqhB,UAAuB,CACnEzxB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,QAAAsmB,CAAS8I,EAAQ/W,EAAQnN,GACrB,MAAMisB,gBAAEA,GAAoB9e,EAC5B,OAAOlY,KAAKyX,QAAQ/Z,IAAIgY,EAAK,kBAAkBshB,WAAyB/H,IAAU,IAC3ElkB,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,MAAAumB,CAAO6I,EAAQ/W,EAAQnN,GACnB,MAAMisB,gBAAEA,KAAoB1xB,GAAS4S,EACrC,OAAOlY,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBshB,WAAyB/H,IAAU,CAC/E3pB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,IAAAuZ,CAAK2d,EAAepiB,EAAQ,CAAA,EAAI5J,GAC5B,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,kBAAkBqhB,UAAqB,GAAgB,CACvFpiB,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAOA,OAAOovB,EAAQ/W,EAAQnN,GACnB,MAAMisB,gBAAEA,GAAoB9e,EAC5B,OAAOlY,KAAKyX,QAAQ4O,OAAO3Q,EAAK,kBAAkBshB,WAAyB/H,IAAU,IAC9ElkB,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,mBAAM4tB,CAAcwJ,EAAe3xB,EAAMyF,GACrC,MAAM6mB,QAAa5xB,KAAK8X,OAAOmf,EAAe3xB,EAAMyF,GACpD,aAAa/K,KAAK0tB,KAAKuJ,EAAerF,EAAKld,GAAI3J,EACnD,CAOA,UAAM2iB,CAAKqJ,EAAe9H,EAAQlkB,GAC9B,MAAMlL,EAAUonB,GAAa,CACzBlc,GAASlL,QACT,CACI,0BAA2B,OAC3B,mCAAoCkL,GAAS+iB,gBAAgBrvB,iBAAc0C,KAGnF,OAAa,CACT,MAAMm3B,QAAqBt4B,KAAKmmB,SAAS8I,EAAQ,CAC7C+H,gBAAiBD,GAClB,IAAKhsB,EAASlL,YAAWqT,eACtB0e,EAAO0G,EAAap4B,KAC1B,OAAQ0xB,EAAKhyB,QACT,IAAK,cACD,IAAImuB,EAAgB,IACpB,GAAIhjB,GAAS+iB,eACTC,EAAgBhjB,EAAQ+iB,mBAEvB,CACD,MAAME,EAAiBsK,EAAalpB,SAASvP,QAAQnC,IAAI,wBACzD,GAAIswB,EAAgB,CAChB,MAAMC,EAAmB1lB,SAASylB,GAC7BE,MAAMD,KACPF,EAAgBE,EAExB,CACJ,OACMhsB,EAAM8rB,GACZ,MACJ,IAAK,SACL,IAAK,YACD,OAAO6D,EAEnB,CACJ,CAOA,YAAM2G,CAAOtB,EAAerF,EAAM7mB,GAC9B,MAAMytB,QAAiBx4B,KAAKyX,QAAQ8X,MAAMzX,OAAO,CAAE8Z,KAAMA,EAAMmG,QAAS,cAAgBhtB,GACxF,OAAO/K,KAAK8X,OAAOmf,EAAe,CAAEwB,QAASD,EAAS9jB,IAAM3J,EAChE,CAIA,mBAAMqsB,CAAcH,EAAerF,EAAM7mB,GACrC,MAAMytB,QAAiBx4B,KAAKu4B,OAAOtB,EAAerF,EAAM7mB,GACxD,aAAa/K,KAAK0tB,KAAKuJ,EAAeuB,EAAS9jB,GAAI3J,EACvD,CAIA,OAAA+P,CAAQmU,EAAQ/W,EAAQnN,GACpB,MAAMisB,gBAAEA,GAAoB9e,EAC5B,OAAOlY,KAAKyX,QAAQ6B,WAAW5D,EAAK,kBAAkBshB,WAAyB/H,YAAgB,GAAU,IAAKlkB,EAASlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAC/L,EC9HG,MAAM64B,WAAqBlhB,GAC9B,WAAA7X,GACIG,SAAS4a,WACT1a,KAAKuvB,MAAQ,IAAIC,GAAexvB,KAAKyX,SACrCzX,KAAK24B,YAAc,IAAIC,GAA2B54B,KAAKyX,QAC3D,CAIA,MAAAK,CAAOxS,EAAMyF,GACT,OAAO/K,KAAKyX,QAAQyO,KAAK,iBAAkB,CACvC5gB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,QAAAsmB,CAAS4Q,EAAehsB,GACpB,OAAO/K,KAAKyX,QAAQ/Z,IAAIgY,EAAK,kBAAkBqhB,IAAiB,IACzDhsB,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,MAAAumB,CAAO2Q,EAAezxB,EAAMyF,GACxB,OAAO/K,KAAKyX,QAAQyO,KAAKxQ,EAAK,kBAAkBqhB,IAAiB,CAC7DzxB,UACGyF,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,IAAAuZ,CAAKzE,EAAQ,CAAA,EAAI5J,GACb,OAAO/K,KAAKyX,QAAQ6B,WAAW,iBAAgB,GAAgB,CAC3D3E,WACG5J,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAIA,OAAOk3B,EAAehsB,GAClB,OAAO/K,KAAKyX,QAAQ4O,OAAO3Q,EAAK,kBAAkBqhB,IAAiB,IAC5DhsB,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,CAKA,MAAAg5B,CAAO9B,EAAezxB,EAAMyF,GACxB,OAAO/K,KAAKyX,QAAQ6B,WAAW5D,EAAK,kBAAkBqhB,WAAsB,GAAU,CAClFzxB,OACA+sB,OAAQ,UACLtnB,EACHlL,QAASonB,GAAa,CAAC,CAAE,cAAe,iBAAmBlc,GAASlL,WAE5E,ECzEJ,IAAIi5B,GAAqBC,GAA0BC,GCA/CC,GAAmBzT,GAAI0T,GAAiBC,GF2E5CT,GAAarJ,MAAQA,GACrBqJ,GAAa5B,YAAcA,GCvEpB,MAAMsC,WAAiB5hB,GAC1B,WAAA7X,GACIG,SAAS4a,WACToe,GAAoB/b,IAAI/c,KAC5B,CAIA,YAAMq5B,CAAOC,EAASz5B,EAAS05B,EAASv5B,KAAKyX,QAAQ+hB,cAAeC,EAAY,KAE5E,aADMz5B,KAAK05B,gBAAgBJ,EAASz5B,EAAS05B,EAAQE,GAC9Cl6B,KAAK6Q,MAAMkpB,EACtB,CAWA,qBAAMI,CAAgBJ,EAASz5B,EAAS05B,EAASv5B,KAAKyX,QAAQ+hB,cAAeC,EAAY,KACrF,GAAsB,oBAAX57B,QAC4B,mBAA5BA,OAAO87B,OAAOC,WACW,mBAAzB/7B,OAAO87B,OAAOE,OACrB,MAAM,IAAI56B,MAAM,wFAEpBzB,EAAuBwC,KAAM84B,GAAqB,IAAKC,IAA0Bt7B,KAAKuC,KAAMu5B,GAC5F,MAAMO,EAAa7S,GAAa,CAACpnB,IAAUwK,OACrC0vB,EAAkBv8B,EAAuBwC,KAAM84B,GAAqB,IAAKE,IAA6Bv7B,KAAKuC,KAAM85B,EAAY,qBAC7HE,EAAYx8B,EAAuBwC,KAAM84B,GAAqB,IAAKE,IAA6Bv7B,KAAKuC,KAAM85B,EAAY,qBACvHG,EAAYz8B,EAAuBwC,KAAM84B,GAAqB,IAAKE,IAA6Bv7B,KAAKuC,KAAM85B,EAAY,cAEvHI,EAAmB3xB,SAASyxB,EAAW,IAC7C,GAAI9L,MAAMgM,GACN,MAAM,IAAI34B,EAA6B,oCAE3C,MAAM44B,EAAa97B,KAAK+7B,MAAMjxB,KAAKqJ,MAAQ,KAC3C,GAAI2nB,EAAaD,EAAmBT,EAChC,MAAM,IAAIl4B,EAA6B,gCAE3C,GAAI24B,EAAmBC,EAAaV,EAChC,MAAM,IAAIl4B,EAA6B,gCAK3C,MAAM84B,EAAaN,EACd7nB,MAAM,KACNtD,KAAKsnB,GAAUA,EAAKhmB,WAAW,OAASgmB,EAAK9kB,UAAU,GAAK8kB,IAE3DoE,EAAgBf,EAAOrpB,WAAW,UACpCqgB,OAAOE,KAAK8I,EAAOh7B,QAAQ,SAAU,IAAK,UACxCgyB,OAAOE,KAAK8I,EAAQ,SAEpBgB,EAAgBN,EAAY,GAAGA,KAAaD,KAAaV,IAAY,GAAGU,KAAaV,IAErFj2B,QAAYxF,OAAO87B,OAAOC,UAAU,MAAOU,EAAe,CAAE17B,KAAM,OAAQ47B,KAAM,YAAa,EAAO,CAAC,WAE3G,IAAK,MAAMC,KAAaJ,EACpB,IACI,MAAMK,EAAiBnK,OAAOE,KAAKgK,EAAW,UAE9C,SADsB58B,OAAO87B,OAAOE,OAAO,OAAQx2B,EAAKq3B,GAAgB,IAAIrvB,aAAcxD,OAAO0yB,IAE7F,MAER,CACA,MAEI,QACJ,CAEJ,MAAM,IAAIh5B,EAA6B,oEAC3C,EAEJu3B,GAAsB,IAAI3a,QAAW4a,GAA2B,SAAkCQ,GAC9F,GAAsB,iBAAXA,GAAyC,IAAlBA,EAAO7yB,OACrC,MAAM,IAAIzH,MAAM,oKAExB,EAAG+5B,GAA8B,SAAqCn5B,EAASjB,GAC3E,IAAKiB,EACD,MAAM,IAAIZ,MAAM,wBAEpB,MAAM1C,EAAQsD,EAAQnC,IAAIkB,GAC1B,GAAIrC,QACA,MAAM,IAAI0C,MAAM,4BAA4BL,KAEhD,OAAOrC,CACX,EClDO,MAAMo+B,GAiBT,WAAAh7B,EAAYi7B,QAAEA,EAAUvR,GAAQ,mBAAkBwR,OAAEA,EAASxR,GAAQ,kBAAiByR,aAAEA,EAAezR,GAAQ,kBAAoB,KAAI0R,QAAEA,EAAU1R,GAAQ,sBAAwB,KAAImQ,cAAEA,EAAgBnQ,GAAQ,0BAA4B,QAASve,GAAS,CAAA,GAuB3P,GAtBAmuB,GAAkBlc,IAAI/c,MACtBk5B,GAAgB37B,IAAIyC,UAAM,GAC1BA,KAAK4f,YAAc,IAAIob,GAAgBh7B,MACvCA,KAAK2f,KAAO,IAAIsb,GAASj7B,MACzBA,KAAKk7B,WAAa,IAAIC,GAAen7B,MACrCA,KAAKuvB,MAAQ,IAAI6L,GAAUp7B,MAC3BA,KAAKq7B,OAAS,IAAIC,GAAWt7B,MAC7BA,KAAKu7B,MAAQ,IAAIC,GAAUx7B,MAC3BA,KAAKy7B,YAAc,IAAIC,GAAgB17B,MACvCA,KAAK27B,OAAS,IAAIC,GAAW57B,MAC7BA,KAAK67B,WAAa,IAAIC,GAAe97B,MACrCA,KAAKgyB,QAAU,IAAI+J,GAAY/7B,MAC/BA,KAAKg8B,aAAe,IAAIC,GAAiBj8B,MACzCA,KAAKk8B,SAAW,IAAIC,GAAan8B,MACjCA,KAAK4tB,KAAO,IAAIwO,GAASp8B,MACzBA,KAAKq8B,QAAU,IAAIC,GAAYt8B,MAC/BA,KAAKu8B,QAAU,IAAIC,GAAYx8B,MAC/BA,KAAK01B,UAAY,IAAI+G,GAAcz8B,MACnCA,KAAK2uB,SAAW,IAAI+N,GAAa18B,MACjCA,KAAK28B,cAAgB,IAAIC,GAAkB58B,MAC3CA,KAAK68B,MAAQ,IAAIC,GAAU98B,MAC3BA,KAAK+8B,WAAa,IAAIC,GAAeh9B,WACtBmB,IAAX05B,EACA,MAAM,IAAIoC,EAAmB,mGAEjC,MAAMlyB,EAAU,CACZ8vB,SACAC,eACAC,UACAvB,mBACG1uB,EACH8vB,QAASA,GAAW,6BAExB,IAAK7vB,EAAQmyB,yBpF3FC,oBAAXC,aAEwB,IAApBA,OAAOxhC,UAEO,oBAAdwH,UoFwFH,MAAM,IAAI85B,EAAmB,sbAEjCj9B,KAAK46B,QAAU7vB,EAAQ6vB,QACvB56B,KAAKo9B,QAAUryB,EAAQqyB,SAAW5X,GAAG6X,gBACrCr9B,KAAKiO,OAASlD,EAAQkD,QAAUqB,QAChC,MAAMguB,EAAkB,OAExBt9B,KAAKkO,SAAWovB,EAChBt9B,KAAKkO,SACDT,GAAc1C,EAAQmD,SAAU,yBAA0BlO,OACtDyN,GAAc4b,GAAQ,cAAe,4BAA6BrpB,OAClEs9B,EACRt9B,KAAKu9B,aAAexyB,EAAQwyB,aAC5Bv9B,KAAKw9B,WAAazyB,EAAQyyB,YAAc,EACxCx9B,KAAK8V,MAAQ/K,EAAQ+K,OnF9GtB,WACH,GAAqB,oBAAVA,MACP,OAAOA,MAEX,MAAM,IAAI7W,MAAM,oJACpB,CmFyGsCw+B,GAC9BzgC,EAAuBgD,KAAMk5B,GAAiBwE,GAC9C19B,KAAK29B,SAAW5yB,EAChB/K,KAAK66B,OAA2B,iBAAXA,EAAsBA,EAAS,cACpD76B,KAAK86B,aAAeA,EACpB96B,KAAK+6B,QAAUA,EACf/6B,KAAKw5B,cAAgBA,CACzB,CAIA,WAAAoE,CAAY7yB,GAgBR,OAfe,IAAI/K,KAAKL,YAAY,IAC7BK,KAAK29B,SACR/C,QAAS56B,KAAK46B,QACd4C,WAAYx9B,KAAKw9B,WACjBJ,QAASp9B,KAAKo9B,QACdnvB,OAAQjO,KAAKiO,OACbC,SAAUlO,KAAKkO,SACf4H,MAAO9V,KAAK8V,MACZynB,aAAcv9B,KAAKu9B,aACnB1C,OAAQ76B,KAAK66B,OACbC,aAAc96B,KAAK86B,aACnBC,QAAS/6B,KAAK+6B,QACdvB,cAAex5B,KAAKw5B,iBACjBzuB,GAGX,CACA,YAAA8yB,GACI,OAAO79B,KAAK29B,SAASE,YACzB,CACA,eAAAC,EAAgBzzB,OAAEA,EAAMwc,MAAEA,IAE1B,CACA,iBAAMkX,CAAYjzB,GACd,OAAOmc,GAAa,CAAC,CAAE+W,cAAe,UAAUh+B,KAAK66B,WACzD,CACA,cAAAoD,CAAetpB,GACX,OAAOupB,EAAavpB,EAAO,CAAElN,YAAa,YAC9C,CACA,YAAA02B,GACI,MAAO,GAAGn+B,KAAKL,YAAYf,WAAWwD,GAC1C,CACA,qBAAAg8B,GACI,MAAO,wBAAwBxgC,KACnC,CACA,eAAAygC,CAAgBz+B,EAAQR,EAAON,EAASe,GACpC,OAAOy+B,EAAgB/9B,SAASX,EAAQR,EAAON,EAASe,EAC5D,CACA,iBAAM0+B,GACF,MAAM1D,EAAS76B,KAAK29B,SAAS9C,OAC7B,GAAsB,mBAAXA,EACP,OAAO,EACX,IAAI2D,EACJ,IACIA,QAAc3D,GAClB,CACA,MAAOl8B,GACH,GAAIA,aAAes+B,EACf,MAAMt+B,EACV,MAAM,IAAIs+B,EAAmB,+CAA+Ct+B,EAAIG,UAEhF,CAAEO,MAAOV,GACb,CACA,GAAqB,iBAAV6/B,IAAuBA,EAC9B,MAAM,IAAIvB,EAAmB,0EAA0EuB,KAG3G,OADAx+B,KAAK66B,OAAS2D,GACP,CACX,CACA,QAAAC,CAAS/oB,EAAMf,EAAO+pB,GAClB,MAAM9D,GAAYp9B,EAAuBwC,KAAMi5B,GAAmB,IAAKE,IAA2B17B,KAAKuC,OAAS0+B,GAAmB1+B,KAAK46B,QAClI/oB,EvFpLe,CAACA,GACnBrQ,EAAuBgX,KAAK3G,GuFmLnB8sB,CAAcjpB,GACtB,IAAIkpB,IAAIlpB,GACN,IAAIkpB,IAAIhE,GAAWA,EAAQzpB,SAAS,MAAQuE,EAAKxF,WAAW,KAAOwF,EAAKlN,MAAM,GAAKkN,IACnFmoB,EAAe79B,KAAK69B,eAO1B,OvFjLD,SAAoB77B,GACvB,IAAKA,EACD,OAAO,EACX,IAAK,MAAM68B,KAAM78B,EACb,OAAO,EACX,OAAO,CACX,CuFqKa88B,CAAWjB,KACZlpB,EAAQ,IAAKkpB,KAAiBlpB,IAEb,iBAAVA,GAAsBA,IAAUhT,MAAMF,QAAQkT,KACrD9C,EAAIgnB,OAAS74B,KAAKi+B,eAAetpB,IAE9B9C,EAAIpT,UACf,CAIA,oBAAMsgC,CAAeh0B,SACX/K,KAAKu+B,aACf,CAOA,oBAAMS,CAAe1qB,GAASzC,IAAEA,EAAG9G,QAAEA,IAAa,CAClD,GAAArN,CAAIgY,EAAM5K,GACN,OAAO9K,KAAKi/B,cAAc,MAAOvpB,EAAM5K,EAC3C,CACA,IAAAob,CAAKxQ,EAAM5K,GACP,OAAO9K,KAAKi/B,cAAc,OAAQvpB,EAAM5K,EAC5C,CACA,KAAAo0B,CAAMxpB,EAAM5K,GACR,OAAO9K,KAAKi/B,cAAc,QAASvpB,EAAM5K,EAC7C,CACA,GAAAq0B,CAAIzpB,EAAM5K,GACN,OAAO9K,KAAKi/B,cAAc,MAAOvpB,EAAM5K,EAC3C,CACA,OAAO4K,EAAM5K,GACT,OAAO9K,KAAKi/B,cAAc,SAAUvpB,EAAM5K,EAC9C,CACA,aAAAm0B,CAAc5M,EAAQ3c,EAAM5K,GACxB,OAAO9K,KAAKsU,QAAQnY,QAAQC,QAAQ0O,GAAMhO,MAAMgO,IACrC,CAAEunB,SAAQ3c,UAAS5K,MAElC,CACA,OAAAwJ,CAAQvJ,EAASq0B,EAAmB,MAChC,OAAO,IAAIzsB,GAAW3S,KAAMA,KAAKq/B,YAAYt0B,EAASq0B,OAAkBj+B,GAC5E,CACA,iBAAMk+B,CAAYC,EAAcC,EAAkB1wB,GAC9C,MAAM9D,QAAgBu0B,EAChB9B,EAAazyB,EAAQyyB,YAAcx9B,KAAKw9B,WACtB,MAApB+B,IACAA,EAAmB/B,SAEjBx9B,KAAK++B,eAAeh0B,GAC1B,MAAMy0B,IAAEA,EAAG3tB,IAAEA,EAAGurB,QAAEA,SAAkBp9B,KAAKy/B,aAAa10B,EAAS,CAC3D20B,WAAYlC,EAAa+B,UAEvBv/B,KAAKg/B,eAAeQ,EAAK,CAAE3tB,MAAK9G,YAEtC,MAAM4G,EAAe,QAAWtT,KAAKC,UAAY,GAAK,IAAO,GAAGG,SAAS,IAAIkhC,SAAS,EAAG,KACnFC,OAAsCz+B,IAAxB0N,EAAoC,GAAK,cAAcA,IACrE+C,EAAYzI,KAAKqJ,MAQvB,GAPA3E,GAAU7N,MAAMwN,MAAM,IAAImE,qBAAiCpD,GAAqB,CAC5EM,sBACAwjB,OAAQtnB,EAAQsnB,OAChBxgB,MACA9G,UACAlL,QAAS2/B,EAAI3/B,WAEbkL,EAAQ0U,QAAQjC,QAChB,MAAM,IAAIqiB,EAEd,MAAMp7B,EAAa,IAAIuY,gBACjB5N,QAAiBpP,KAAK8/B,iBAAiBjuB,EAAK2tB,EAAKpC,EAAS34B,GAAY+O,MAAMxU,GAC5E+gC,EAAc52B,KAAKqJ,MACzB,GAAIpD,aAAoBtR,WAAWmB,MAAO,CACtC,MAAM+gC,EAAe,aAAaT,uBAClC,GAAIx0B,EAAQ0U,QAAQjC,QAChB,MAAM,IAAIqiB,EAMd,MAAMI,EAAYvhC,EAAa0Q,IAC3B,eAAeoJ,KAAK3Z,OAAOuQ,IAAa,UAAWA,EAAWvQ,OAAOuQ,EAAS/P,OAAS,KAC3F,GAAIkgC,EAQA,OAPA1xB,GAAU7N,MAAMuN,KAAK,IAAIoE,iBAA4BsuB,EAAY,YAAc,cAAcD,KAC7FnyB,GAAU7N,MAAMwN,MAAM,IAAImE,iBAA4BsuB,EAAY,YAAc,aAAaD,KAAiBzxB,GAAqB,CAC/HM,sBACAgD,MACAU,WAAYwtB,EAAcnuB,EAC1B9S,QAASsQ,EAAStQ,WAEfkB,KAAKkgC,aAAan1B,EAASw0B,EAAkB1wB,GAAuB8C,GAS/E,GAPA9D,GAAU7N,MAAMuN,KAAK,IAAIoE,iBAA4BsuB,EAAY,YAAc,0CAC/EpyB,GAAU7N,MAAMwN,MAAM,IAAImE,iBAA4BsuB,EAAY,YAAc,yCAA0C1xB,GAAqB,CAC3IM,sBACAgD,MACAU,WAAYwtB,EAAcnuB,EAC1B9S,QAASsQ,EAAStQ,WAElBmhC,EACA,MAAM,IAAIE,EAEd,MAAM,IAAIC,EAA0B,CAAE/gC,MAAO+P,GACjD,CACA,MAIMixB,EAAe,IAAI1uB,IAAeiuB,IAJjB,IAAIxwB,EAASvP,QAAQ8O,WACvChF,QAAO,EAAE/K,KAAmB,iBAATA,IACnBgQ,KAAI,EAAEhQ,EAAMrC,KAAW,KAAOqC,EAAO,KAAOW,KAAKC,UAAUjD,KAC3DuM,KAAK,QAC+D02B,EAAInN,UAAUxgB,KAAOzC,EAASkxB,GAAK,YAAc,wBAAwBlxB,EAASxP,aAAamgC,EAAcnuB,MACtL,IAAKxC,EAASkxB,GAAI,CACd,MAAMC,QAAoBvgC,KAAKugC,YAAYnxB,GAC3C,GAAImwB,GAAoBgB,EAAa,CACjC,MAAMP,EAAe,aAAaT,uBAWlC,anFhPThwB,eAAoCxK,GACvC,GAAe,OAAXA,GAAqC,iBAAXA,EAC1B,OACJ,GAAIA,EAAOX,OAAOC,eAEd,kBADMU,EAAOX,OAAOC,iBAAiBQ,YAGzC,MAAMG,EAASD,EAAOE,YAChBG,EAAgBJ,EAAOJ,SAC7BI,EAAOG,oBACDC,CACV,CmF4NsBo7B,CAA2BpxB,EAAS9J,MAC1CuI,GAAU7N,MAAMuN,KAAK,GAAG8yB,OAAkBL,KAC1CnyB,GAAU7N,MAAMwN,MAAM,IAAImE,sBAAiCquB,KAAiBzxB,GAAqB,CAC7FM,sBACAgD,IAAKzC,EAASyC,IACdjS,OAAQwP,EAASxP,OACjBC,QAASuP,EAASvP,QAClB0S,WAAYwtB,EAAcnuB,KAEvB5R,KAAKkgC,aAAan1B,EAASw0B,EAAkB1wB,GAAuB8C,EAAcvC,EAASvP,QACtG,CACA,MAAMmgC,EAAeO,EAAc,8BAAgC,uBACnE1yB,GAAU7N,MAAMuN,KAAK,GAAG8yB,OAAkBL,KAC1C,MAAMS,QAAgBrxB,EAASkD,OAAOkB,OAAO7U,GAAQK,EAAYL,GAAKG,UAChE4hC,EvFxOM,CAACpuB,IACrB,IACI,OAAO/S,KAAK6Q,MAAMkC,EACtB,CACA,MAAO3T,GACH,MACJ,GuFkOwBgiC,CAASF,GACnBG,EAAaF,OAAUv/B,EAAYs/B,EACzC5yB,GAAU7N,MAAMwN,MAAM,IAAImE,sBAAiCquB,KAAiBzxB,GAAqB,CAC7FM,sBACAgD,IAAKzC,EAASyC,IACdjS,OAAQwP,EAASxP,OACjBC,QAASuP,EAASvP,QAClBf,QAAS8hC,EACTruB,WAAYpJ,KAAKqJ,MAAQZ,KAG7B,MADY5R,KAAKq+B,gBAAgBjvB,EAASxP,OAAQ8gC,EAASE,EAAYxxB,EAASvP,QAEpF,CASA,OARAgO,GAAU7N,MAAMuN,KAAK8yB,GACrBxyB,GAAU7N,MAAMwN,MAAM,IAAImE,oBAAgCpD,GAAqB,CAC3EM,sBACAgD,IAAKzC,EAASyC,IACdjS,OAAQwP,EAASxP,OACjBC,QAASuP,EAASvP,QAClB0S,WAAYwtB,EAAcnuB,KAEvB,CAAExC,WAAUrE,UAAStG,aAAYkN,eAAc9C,sBAAqB+C,YAC/E,CACA,UAAA0H,CAAW5D,EAAMnB,EAAMzJ,GACnB,OAAO9K,KAAKiU,eAAeM,EAAM,CAAE8d,OAAQ,MAAO3c,UAAS5K,GAC/D,CACA,cAAAmJ,CAAeM,EAAMxJ,GACjB,MAAMuJ,EAAUtU,KAAKq/B,YAAYt0B,EAAS,UAAM5J,GAChD,OAAO,IAAI0/B,GAAuB7gC,KAAMsU,EAASC,EACrD,CACA,sBAAMurB,CAAiBjuB,EAAKivB,EAAM5+B,EAAIuC,GAClC,MAAMgb,OAAEA,EAAM4S,OAAEA,KAAWtnB,GAAY+1B,GAAQ,CAAA,EAC3CrhB,GACAA,EAAOC,iBAAiB,SAAS,IAAMjb,EAAWgL,UACtD,MAAM2tB,EAAUj7B,YAAW,IAAMsC,EAAWgL,SAASvN,GAC/C6+B,EAAkBjjC,WAAWkG,gBAAkB+G,EAAQzF,gBAAgBxH,WAAWkG,gBAC3D,iBAAjB+G,EAAQzF,MAAsC,OAAjByF,EAAQzF,MAAiBlB,OAAOC,iBAAiB0G,EAAQzF,KAC5Fi4B,EAAe,CACjB9d,OAAQhb,EAAWgb,UACfshB,EAAiB,CAAEC,OAAQ,QAAW,CAAA,EAC1C3O,OAAQ,SACLtnB,GAEHsnB,IAGAkL,EAAalL,OAASA,EAAOhsB,eAEjC,IAEI,aAAarG,KAAK8V,MAAMrY,UAAK0D,EAAW0Q,EAAK0rB,EACjD,CACR,QACY0D,aAAa7D,EACjB,CACJ,CACA,iBAAMmD,CAAYnxB,GAEd,MAAM8xB,EAAoB9xB,EAASvP,QAAQnC,IAAI,kBAE/C,MAA0B,SAAtBwjC,GAEsB,UAAtBA,IAGoB,MAApB9xB,EAASxP,SAGW,MAApBwP,EAASxP,SAGW,MAApBwP,EAASxP,QAGTwP,EAASxP,QAAU,MAG3B,CACA,kBAAMsgC,CAAan1B,EAASw0B,EAAkB5tB,EAAcwvB,GACxD,IAAIC,EAEJ,MAAMC,EAAyBF,GAAiBzjC,IAAI,kBACpD,GAAI2jC,EAAwB,CACxB,MAAMC,EAAYC,WAAWF,GACxBhf,OAAO6L,MAAMoT,KACdF,EAAgBE,EAExB,CAEA,MAAME,EAAmBL,GAAiBzjC,IAAI,eAC9C,GAAI8jC,IAAqBJ,EAAe,CACpC,MAAMK,EAAiBF,WAAWC,GAK9BJ,EAJC/e,OAAO6L,MAAMuT,GAIEt4B,KAAKiH,MAAMoxB,GAAoBr4B,KAAKqJ,MAHnB,IAAjBivB,CAKxB,CAGA,KAAML,GAAiB,GAAKA,GAAiBA,EAAgB,KAAY,CACrE,MAAM5D,EAAazyB,EAAQyyB,YAAcx9B,KAAKw9B,WAC9C4D,EAAgBphC,KAAK0hC,mCAAmCnC,EAAkB/B,EAC9E,CAEA,aADMv7B,EAAMm/B,GACLphC,KAAKq/B,YAAYt0B,EAASw0B,EAAmB,EAAG5tB,EAC3D,CACA,kCAAA+vB,CAAmCnC,EAAkB/B,GACjD,MAEMmE,EAAanE,EAAa+B,EAKhC,OAHqBlhC,KAAKo5B,IAJA,GAIwBp5B,KAAKujC,IAAI,EAAGD,GAHxC,IAKP,EAAoB,IAAhBtjC,KAAKC,UACO,GACnC,CACA,kBAAMmhC,CAAaoC,GAAcnC,WAAEA,EAAa,GAAM,CAAA,GAClD,MAAM30B,EAAU,IAAK82B,IACfxP,OAAEA,EAAM3c,KAAEA,EAAIf,MAAEA,EAAK+pB,eAAEA,GAAmB3zB,EAC1C8G,EAAM7R,KAAKy+B,SAAS/oB,EAAMf,EAAO+pB,GACnC,YAAa3zB,GvFlZc,EAACnM,EAAMoiB,KAC1C,GAAiB,iBAANA,IAAmBqB,OAAOyf,UAAU9gB,GAC3C,MAAM,IAAIvhB,EAAY,GAAGb,wBAE7B,GAAIoiB,EAAI,EACJ,MAAM,IAAIvhB,EAAY,GAAGb,+BAErB,EuF4YAmjC,CAAwB,UAAWh3B,EAAQqyB,SAC/CryB,EAAQqyB,QAAUryB,EAAQqyB,SAAWp9B,KAAKo9B,QAC1C,MAAM73B,YAAEA,EAAWD,KAAEA,GAAStF,KAAKgiC,UAAU,CAAEj3B,YAY/C,MAAO,CAAEy0B,IAVG,CACRnN,SACAxyB,cAHqBG,KAAKinB,aAAa,CAAElc,QAAS82B,EAAcxP,SAAQ9sB,cAAam6B,kBAIjF30B,EAAQ0U,QAAU,CAAEA,OAAQ1U,EAAQ0U,WACpC3hB,WAAWkG,gBACXsB,aAAgBxH,WAAWkG,gBAAkB,CAAEg9B,OAAQ,WACvD17B,GAAQ,CAAEA,WACVtF,KAAKu9B,cAAgB,MACrBxyB,EAAQwyB,cAAgB,IAElB1rB,MAAKurB,QAASryB,EAAQqyB,QACxC,CACA,kBAAMnW,EAAalc,QAAEA,EAAOsnB,OAAEA,EAAM9sB,YAAEA,EAAWm6B,WAAEA,IAC/C,IAAIuC,EAAqB,CAAA,EACrBjiC,KAAKkiC,mBAAgC,QAAX7P,IACrBtnB,EAAQo3B,iBACTp3B,EAAQo3B,eAAiBniC,KAAKo+B,yBAClC6D,EAAmBjiC,KAAKkiC,mBAAqBn3B,EAAQo3B,gBAEzD,MAAMtiC,EAAUonB,GAAa,CACzBgb,EACA,CACIza,OAAQ,mBACR,aAAcxnB,KAAKm+B,eACnB,0BAA2Bt/B,OAAO6gC,MAC9B30B,EAAQqyB,QAAU,CAAE,sBAAuBv+B,OAAOR,KAAK+jC,MAAMr3B,EAAQqyB,QAAU,OAAW,CAAA,KpF3TlGv5B,IAAqBA,EAAmBxB,KoF6TpC,sBAAuBrC,KAAK86B,aAC5B,iBAAkB96B,KAAK+6B,eAErB/6B,KAAK+9B,YAAYhzB,GACvB/K,KAAK29B,SAAS0E,eACd98B,EACAwF,EAAQlL,UAGZ,OADAG,KAAK89B,gBAAgBj+B,GACdA,EAAQwK,MACnB,CACA,SAAA23B,EAAYj3B,SAASzF,KAAEA,EAAMzF,QAASyiC,KAClC,IAAKh9B,EACD,MAAO,CAAEC,iBAAapE,EAAWmE,UAAMnE,GAE3C,MAAMtB,EAAUonB,GAAa,CAACqb,IAC9B,OAEAt2B,YAAYqL,OAAO/R,IACfA,aAAgB0G,aAChB1G,aAAgBi9B,UACC,iBAATj9B,GAEJzF,EAAQwK,OAAOhN,IAAI,iBAEtBS,WAAW8Y,MAAQtR,aAAgBxH,WAAW8Y,MAE/CtR,aAAgBgR,UAEhBhR,aAAgBk9B,iBAEf1kC,WAAWkG,gBAAkBsB,aAAgBxH,WAAWkG,eAClD,CAAEuB,iBAAapE,EAAWmE,KAAMA,GAElB,iBAATA,IACXlB,OAAOC,iBAAiBiB,GACpBlB,OAAOE,YAAYgB,GAAQ,SAAUA,GAA6B,mBAAdA,EAAK7I,MACvD,CAAE8I,iBAAapE,EAAWmE,KAAMm9B,EAAyBn9B,IAGzD9H,EAAuBwC,KAAMk5B,GAAiB,KAAKz7B,KAAKuC,KAAM,CAAEsF,OAAMzF,WAErF,EC9fE,SAAU6iC,IAAYpiC,IAC1BA,EAAGqiC,QACHA,EAAOC,WACPA,IAMA,MAAM9jC,EAAuBnD,SAASC,cAAc,YACpDkD,EAAQ+jC,MAAMC,MAAQH,EAAU,MAAQ,YACxC7jC,EAAQikC,YAAcziC,EACtBxB,EAAQ+jC,MAAMG,QAAU,QACnBJ,GAAYzgC,YAAW,IAAOrD,EAAQ+jC,MAAMG,QAAU,QAAS,IACtE,CDkfAxd,GAAKmV,GAAQzB,GAAkB,IAAIruB,QAAWouB,GAAoB,IAAI9a,QAAWgb,GAA4B,WACzG,MAAwB,8BAAjBn5B,KAAK46B,OAChB,EACAD,GAAOA,OAASnV,GAChBmV,GAAO0C,gBAAkB,IACzB1C,GAAOl7B,YAAcw9B,EACrBtC,GAAOj7B,SAAW4+B,EAClB3D,GAAOl6B,mBAAqB2/B,EAC5BzF,GAAOv5B,0BAA4B++B,EACnCxF,GAAOz5B,kBAAoB2+B,EAC3BlF,GAAO95B,cAAgBoiC,EACvBtI,GAAO75B,cAAgBoiC,EACvBvI,GAAO35B,eAAiBmiC,EACxBxI,GAAOj6B,gBAAkB0iC,EACzBzI,GAAOh6B,oBAAsB0iC,EAC7B1I,GAAO15B,oBAAsBqiC,EAC7B3I,GAAO/5B,sBAAwB2iC,EAC/B5I,GAAO55B,yBAA2ByiC,EAClC7I,GAAOp5B,6BAA+BkiC,EACtC9I,GAAO+I,OtErfAn0B,eAAsBhT,EAAOqC,EAAMmM,GAKtC,GAJAiK,KAnBe,CAACzY,GAAmB,MAATA,GACT,iBAAVA,GACe,iBAAfA,EAAMqC,MACiB,iBAAvBrC,EAAMonC,cACb3sB,GAAWza,GAmBPqnC,CAFJrnC,QAAcA,GAGV,OAAIA,aAAiB0Y,KACV1Y,EAEJ8Y,GAAS,OAAO9Y,EAAM2a,eAAgB3a,EAAMqC,MAEvD,GAxBmB,CAACrC,GAAmB,MAATA,GACb,iBAAVA,GACc,iBAAdA,EAAMsV,KACS,mBAAftV,EAAMoa,KAqBTktB,CAAetnC,GAAQ,CACvB,MAAMoa,QAAapa,EAAMoa,OAEzB,OADA/X,IAASA,EAAO,IAAIggC,IAAIriC,EAAMsV,KAAKiyB,SAAS5xB,MAAM,SAASyD,OACpDN,SAAe8B,GAASR,GAAO/X,EAAMmM,EAChD,CACA,MAAMqM,QAAcD,GAAS5a,GAE7B,GADAqC,IAASA,EAAO4W,GAAQjZ,KACnBwO,GAAS1K,KAAM,CAChB,MAAMA,EAAO+W,EAAMmD,MAAM2b,GAAyB,iBAATA,GAAqB,SAAUA,GAAQA,EAAK71B,OACjE,iBAATA,IACP0K,EAAU,IAAKA,EAAS1K,QAEhC,CACA,OAAOgV,GAAS+B,EAAOxY,EAAMmM,EACjC,EsE6dA4vB,GAAOpU,YAAcA,GACrBoU,GAAOlU,KAAOA,GACdkU,GAAO3K,WAAaA,GACpB2K,GAAOtL,MAAQA,GACfsL,GAAO/G,OAASA,GAChB+G,GAAO/S,MAAQA,GACf+S,GAAO3G,YAAcA,GACrB2G,GAAO5G,OAASA,GAChB4G,GAAOzH,WAAaA,GACpByH,GAAOzI,QAAUA,GACjByI,GAAOjC,aAAeA,GACtBiC,GAAOvB,SAAWA,GAClBuB,GAAOjM,KAAOA,GACdiM,GAAOxS,QAAUA,GACjBwS,GAAOhE,QAAUoN,GACjBpJ,GAAOrE,UAAYA,GACnBqE,GAAO9R,SAAWA,GAClB8R,GAAO9K,cAAgBA,GACvB8K,GAAOpJ,MAAQA,GACfoJ,GAAOrL,WAAaA,GEviBpB,MAAM0U,GAAmCroC,SAASC,cAAc,WAC1DqoC,GAA+BtoC,SAASC,cAAc,UACtDsoC,GAA0BvoC,SAASC,cAAc,WACjDuoC,GAA0CxoC,SAASC,cAAc,uBACjEwoC,GAAoCzoC,SAASC,cAAc,YAC3DyoC,GAAsC1oC,SAASC,cAAc,cAC7D0oC,GAAsC3oC,SAASC,cAAc,uBAInD2oC,MDWV,SAA2CxhC,GAC/C,MAAMyhC,EAAgBzhC,EAAQQ,MAAM,aACpC,SAAKihC,aAAa,EAAbA,EAAgB,KAGdniB,OAAOmiB,EAAc,KAAO,CACrC,CCfMC,CADYR,GAAW1nC,OAIzB4nC,GAAsBtB,MAAMG,QAAU,OAFtCmB,GAAsBtB,MAAMG,QAAU,MAI1C,CAEAiB,GAAWvkB,iBAAiB,QAAS6kB,IA4CrCN,GAAWvkB,iBAAiB,uEAxC1B,MAAMmb,EAA6B,QAApBrV,EAAAwe,GAAeznC,aAAK,IAAAipB,OAAA,EAAAA,EAAErT,OAC/ByoB,EAA+B,QAArBnV,EAAA2e,GAAgB7nC,aAAK,IAAAkpB,OAAA,EAAAA,EAAEtT,OACjCuyB,EAAmC,QAAvBhf,EAAA2e,GAAkB9nC,aAAK,IAAAmpB,OAAA,EAAAA,EAAEvT,OAE3C,GAAK0oB,EAAL,CAEAoJ,GAAWU,UAAY,GAEvB,IACE,MAAM/2B,EAAS,IAAI+sB,GAAO,CACxBE,SACAD,UACAG,QAAS2J,EACTxH,yBAAyB,IAKrBvB,SAFY/tB,EAAO+tB,OAAOviB,QAEblZ,KAAKyJ,QACtBmb,GACEA,EAAMpQ,GAAGxE,WAAW,SACY,IAAhC4U,EAAMpQ,GAAGmkB,OAAO,YAChB/T,EAAMpQ,GAAGxE,WAAW,aAExByrB,EAAO/xB,MAAK,CAACiP,EAAGC,IAAMA,EAAEpE,GAAGkwB,cAAc/rB,EAAEnE,MAE3C,IAAK,MAAMoQ,KAAS6W,EAAQ,CAC1B,MAAMkJ,EAAMlpC,SAASmpC,cAAc,UACnCD,EAAItoC,MAAQuoB,EAAMpQ,GAClBmwB,EAAI9B,YAAcje,EAAMpQ,GACxBwvB,GAAWa,YAAYF,EACzB,CAEAN,IACF,CAAE,MAAO5lC,GACP2Q,QAAQlQ,MAAMT,GACd+jC,GAAY,CAAEpiC,IAAK3B,EAAKgkC,SAAS,GACnC,CAjCa,CAkCf,GAAC,IA4EkChnC,SAASC,cAAc,gBAC5C8jB,iBAAiB,6EAxE7B,MAAMoF,EAAwB,QAAhBU,EAAAye,GAAW1nC,aAAK,IAAAipB,OAAA,EAAAA,EAAErT,OAC1B0oB,EAA6B,QAApBpV,EAAAue,GAAeznC,aAAK,IAAAkpB,OAAA,EAAAA,EAAEtT,OAC/ByoB,EAA+B,QAArBlV,EAAA0e,GAAgB7nC,aAAK,IAAAmpB,OAAA,EAAAA,EAAEvT,OACjCuyB,EAAmC,QAAvB/e,EAAA0e,GAAkB9nC,aAAK,IAAAopB,OAAA,EAAAA,EAAExT,OACrC6yB,EAAYV,GAAkB/nC,MAAQgM,SAAS+7B,GAAkB/nC,YAAS4E,EAEhF,IACEuhC,GAAY,CAAEpiC,IAAK,0BAA2BsiC,YAAY,EAAMD,SAAS,IACzE,MAAM/0B,EAAS,IAAI+sB,GAAO,CACxBE,SACAD,UACAG,QAAS2J,EACTxH,yBAAyB,IAsCrBpiB,EAAwC,QAA9BmqB,EAAqB,QAArBC,SApCSt3B,EAAO+R,KAAKC,YAAY9H,OAAO,CACtDgN,QACAtG,SAAU,CACR,CACEjD,KAAM,OACNT,QACE,yFAGNqqB,sBAAuBH,GAAa,IACpCrrB,gBAAiB,CACftZ,KAAM,cACN+kC,YAAa,CACXxmC,KAAM,aACN+b,QAAQ,EACR0qB,OAAQ,CACNhlC,KAAM,SACNilC,WAAY,CACVC,MAAO,CAAEllC,KAAM,SAAUggB,YAAa,kBACtCmlB,QAAS,CAAEnlC,KAAM,UAAWggB,YAAa,eACzCngB,KAAM,CACJG,KAAM,SACNilC,WAAY,CACVG,OAAQ,CAAEplC,KAAM,YAElBqlC,SAAU,CAAC,UACXC,sBAAsB,IAG1BD,SAAU,CAAC,QAAS,UAAW,QAC/BC,sBAAsB,QAMH5rB,QAAQ,UAAE,IAAAmrB,OAAA,EAAAA,EAAEpmC,eAAO,IAAAmmC,OAAA,EAAAA,EAAEnqB,QAChD,IAAKA,EACH,MAAM,IAAI7b,MAAM,uCAGlB,MAAM4b,EAAStb,KAAK6Q,MAAM0K,GAC1B,GAC0B,iBAAjBD,EAAO0qB,OACY,kBAAnB1qB,EAAO2qB,SACS,iBAAhB3qB,EAAO3a,MACgB,iBAAvB2a,EAAO3a,KAAKulC,OAEnB,MAAM,IAAIxmC,MAAM,mDAGlByjC,GAAY,CAAEpiC,IAAK,uDACrB,CAAE,MAAO3B,GACP+jC,GAAY,CAAEpiC,IAAK3B,EAAKgkC,SAAS,GACnC,CACF,GAAC,ICvID,MAAMiD,GAAa,CAAC,iBAGdC,GAAgD,CACpDC,aAAc,GACdC,UAAW,CAAC,SAAU,uBAMRC,KACd,MAAMC,EAAcJ,GAAoBtqC,EAAWC,YAC7C0qC,EAAkBzqC,EAAekO,QACrC+Y,IAAUujB,EAAYlnC,SAAS2jB,KAAWkjB,GAAW7mC,SAAS2jB,KAEhE,IAAK,MAAMhO,KAAMuxB,EACftqC,SAASC,cAAc,IAAM8Y,GAAKyxB,cAAetD,MAAMG,QAAU,OAEnE,IAAK,MAAMtuB,KAAMwxB,EACfvqC,SAASC,cAAc,IAAM8Y,GAAKyxB,cAAetD,MAAMG,QAAU,EAErE,CAGA,IAAK,MAAMoD,KAAU1qC,EACnB0qC,EAAO1mB,iBAAiB,SAAS,WAC/B,MAAMnjB,EAAQ6pC,EAAO7pC,MACrBhB,EAAWC,WAAae,EACxB,IAAK,MAAM8pC,KAAQ3qC,EACb2qC,EAAK9pC,QAAUA,EACjB8pC,EAAKC,UAAUvpB,IAAI,gBAEnBspB,EAAKC,UAAUC,OAAO,gBAG1BP,IACF,ICxCF,MAAMQ,GAAkB,QAClBC,GAAiB9qC,SAASC,cAAc,qBAoB9B8qC,GAAW3jC,EAAiB4jC,GAAY,GACtD,GAAIA,EAEF,YADAF,GAAe1D,YAAc,IAAMhgC,GAIrC,MAAM6jC,EAAOjrC,SAASmpC,cAAc,KACpC8B,EAAKC,KAAO,4CACZD,EAAKE,IAAM,sBACXF,EAAKG,OAAS,SACdH,EAAK7D,YAAc,IAAMhgC,EACzB0jC,GAAe1B,YAAY6B,GAC3BH,GAAe1B,YAAYppC,SAASqrC,eAAe,uBACrD,+CAME,MAAMC,4DAhCN,MAAMzH,QAAY1pB,MAChB,8EAGF,aADkB0pB,EAAIntB,QACXtP,OACb,GAAC,CA2B2BmkC,GAAiB1zB,OAAM7U,IAC/C2Q,QAAQlQ,MAAMT,GACP6nC,MAGHW,EAAsBF,EAAY/0B,MAAM,KACxCk1B,EAAyBZ,GAAgBt0B,MAAM,KAC/Cm1B,EAAmBhpC,KAAKo5B,IAAI0P,EAAoBzgC,OAAQ0gC,EAAuB1gC,QAErF,IAAK,IAAIP,EAAI,EAAGA,EAAIkhC,IAAoBlhC,EAAG,CACzC,GAAIoC,SAAS4+B,EAAoBhhC,IAAMoC,SAAS6+B,EAAuBjhC,IACrE,OAAOugC,GAAWO,GAAa,GAC1B,GAAI1+B,SAAS6+B,EAAuBjhC,IAAMoC,SAAS4+B,EAAoBhhC,IAC5E,OAAOugC,GAAWF,GAEtB,CAEAE,GAAWF,GACb,GAAC,CAEDc,GC5DA,MAAMC,GAAwB5rC,SAASC,cAAc,aAC/C4rC,GAAgC7rC,SAASC,cAAc,sBACvD6rC,GAAkC9rC,SAASC,cAAc,oBAe/D6rC,GAAe/nB,iBAAiB,SAAS,SAAUvP,GACjDA,EAAMu3B,iBAbwD,SAAnCF,GAAiB3E,MAAMG,SAGhDuE,GAAS1E,MAAMG,QAAU,OACzBwE,GAAiB3E,MAAMG,QAAU,OACjCyE,GAAe1E,YAAc,sBAE7BwE,GAAS1E,MAAMG,QAAU,OACzBwE,GAAiB3E,MAAMG,QAAU,OACjCyE,GAAe1E,YAAc,sBAMjC,ICZA,MAAM4E,GAAUhsC,SAASC,cAAc,SAGjCgsC,GAAa,CAAC,SAAU,OAAQ,QAAS,UAAW,YAAa,YAAa,gBAGpFD,GAAQjoB,iBAAiB,SAAS,WAChC,MAAOmb,EAAQ16B,EAAM2kB,EAAO8V,EAASoK,EAAWN,EAAWmD,GAAgBD,GAAWh5B,KACpFk5B,GAAansC,SAASC,cAAc,IAAMksC,GAA+BvrC,MAAM4V,UAE1E41B,EAAMC,EAAOjzB,EAAQkzB,EAAQC,EAAWC,EAAU/K,EAASgL,EAASC,GACzE5sC,EAAemT,KAAIk5B,IACjB,MAAMQ,EAA4B3sC,SAASC,cAAc,IAAMksC,GAC/D,OAAOQ,EAAQC,SAAoD,SAAzCD,EAAQnC,cAAetD,MAAMG,OAAkB,IAGxEnI,GAAW/V,EAKZ3kB,EAAKuG,OAAS,GAAKvG,EAAKuG,OAAS,EACnCg8B,GAAY,CACVpiC,IAAK,gDACLqiC,SAAS,KAKb6F,OAAOC,QAAQC,KAAKnrC,IAAI,CACtBorC,UAAW,CACT9N,SACA16B,OACA2kB,QACA8V,UACAoK,UAAWA,EAAYz8B,SAASy8B,QAAa7jC,EAC7CujC,YACAmD,aAAcA,EAAet/B,SAASs/B,QAAgB1mC,EACtD4mC,OACAC,QACAjzB,SACAkzB,SACAC,YACAC,WACA/K,UACAgL,UACAC,gBACAhC,KAAM9qC,EAAWC,cAIrBknC,GAAY,CAAEpiC,IAAK,yBAlCjBoiC,GAAY,CAAEpiC,IAAK,+BAAgCqiC,SAAS,GAmChE,IAGA6F,OAAOC,QAAQC,KAAKhrC,IAAI,CAAC,cAAcZ,MAAK,SAAU2rC,GACpD,MAAMG,EAASH,EAAQE,UAEvB,GAAIC,EAAQ,CACV,GAAIA,EAAOvC,KAAM,CACf9qC,EAAWC,WAAaotC,EAAOvC,KAC/B,IAAK,MAAMA,KAAQ3qC,EACb2qC,EAAK9pC,QAAUqsC,EAAOvC,KACxBA,EAAKC,UAAUC,OAAO,gBAEtBF,EAAKC,UAAUvpB,IAAI,eAGzB,CAEA6qB,GAAW3pB,SAAQ5a,GACjBulC,EAAOvlC,GACD1H,SAASC,cAAc,IAAMyH,GAA0B9G,MAAQqsC,EAAOvlC,GACxE,OAEN5H,EAAewiB,SACb5a,GAAS1H,SAASC,cAAc,IAAMyH,GAA0BklC,QAAUK,EAAOvlC,IAAQ,IAE7F,CAEA2iC,KACAzB,IACF","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93]} \ No newline at end of file +{"version":3,"file":"popup.js","sources":["../../node_modules/preact/dist/preact.mjs","../../node_modules/preact/jsx-runtime/dist/jsxRuntime.mjs","../../node_modules/tslib/tslib.es6.js","../../node_modules/preact/hooks/dist/hooks.mjs","../../src/popup/components/Header.tsx","../../node_modules/openai/internal/tslib.mjs","../../node_modules/openai/internal/utils/uuid.mjs","../../node_modules/openai/internal/errors.mjs","../../node_modules/openai/core/error.mjs","../../node_modules/openai/internal/utils/values.mjs","../../node_modules/openai/internal/utils/sleep.mjs","../../node_modules/openai/version.mjs","../../node_modules/openai/internal/detect-platform.mjs","../../node_modules/openai/internal/shims.mjs","../../node_modules/openai/internal/request-options.mjs","../../node_modules/openai/internal/qs/formats.mjs","../../node_modules/openai/internal/qs/utils.mjs","../../node_modules/openai/internal/qs/stringify.mjs","../../node_modules/openai/internal/utils/bytes.mjs","../../node_modules/openai/internal/decoders/line.mjs","../../node_modules/openai/internal/utils/log.mjs","../../node_modules/openai/core/streaming.mjs","../../node_modules/openai/core/api-promise.mjs","../../node_modules/openai/core/pagination.mjs","../../node_modules/openai/internal/parse.mjs","../../node_modules/openai/internal/uploads.mjs","../../node_modules/openai/internal/to-file.mjs","../../node_modules/openai/core/resource.mjs","../../node_modules/openai/internal/utils/path.mjs","../../node_modules/openai/resources/chat/completions/messages.mjs","../../node_modules/openai/lib/parser.mjs","../../node_modules/openai/lib/chatCompletionUtils.mjs","../../node_modules/openai/lib/EventStream.mjs","../../node_modules/openai/lib/AbstractChatCompletionRunner.mjs","../../node_modules/openai/lib/RunnableFunction.mjs","../../node_modules/openai/lib/ChatCompletionRunner.mjs","../../node_modules/openai/_vendor/partial-json-parser/parser.mjs","../../node_modules/openai/lib/ChatCompletionStream.mjs","../../node_modules/openai/lib/ChatCompletionStreamingRunner.mjs","../../node_modules/openai/resources/chat/completions/completions.mjs","../../node_modules/openai/resources/chat/chat.mjs","../../node_modules/openai/internal/headers.mjs","../../node_modules/openai/resources/audio/speech.mjs","../../node_modules/openai/resources/audio/transcriptions.mjs","../../node_modules/openai/resources/audio/translations.mjs","../../node_modules/openai/resources/audio/audio.mjs","../../node_modules/openai/resources/batches.mjs","../../node_modules/openai/resources/beta/assistants.mjs","../../node_modules/openai/resources/beta/realtime/sessions.mjs","../../node_modules/openai/resources/beta/realtime/transcription-sessions.mjs","../../node_modules/openai/resources/beta/realtime/realtime.mjs","../../node_modules/openai/resources/beta/threads/messages.mjs","../../node_modules/openai/resources/beta/threads/runs/steps.mjs","../../node_modules/openai/internal/utils/base64.mjs","../../node_modules/openai/internal/utils/env.mjs","../../node_modules/openai/lib/AssistantStream.mjs","../../node_modules/openai/resources/beta/threads/runs/runs.mjs","../../node_modules/openai/resources/beta/threads/threads.mjs","../../node_modules/openai/resources/beta/beta.mjs","../../node_modules/openai/resources/completions.mjs","../../node_modules/openai/resources/containers/files/content.mjs","../../node_modules/openai/resources/containers/files/files.mjs","../../node_modules/openai/resources/containers/containers.mjs","../../node_modules/openai/resources/conversations/items.mjs","../../node_modules/openai/resources/conversations/conversations.mjs","../../node_modules/openai/resources/embeddings.mjs","../../node_modules/openai/resources/evals/runs/output-items.mjs","../../node_modules/openai/resources/evals/runs/runs.mjs","../../node_modules/openai/resources/evals/evals.mjs","../../node_modules/openai/resources/files.mjs","../../node_modules/openai/resources/fine-tuning/methods.mjs","../../node_modules/openai/resources/fine-tuning/alpha/graders.mjs","../../node_modules/openai/resources/fine-tuning/alpha/alpha.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/permissions.mjs","../../node_modules/openai/resources/fine-tuning/checkpoints/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs","../../node_modules/openai/resources/fine-tuning/jobs/jobs.mjs","../../node_modules/openai/resources/fine-tuning/fine-tuning.mjs","../../node_modules/openai/resources/graders/grader-models.mjs","../../node_modules/openai/resources/graders/graders.mjs","../../node_modules/openai/resources/images.mjs","../../node_modules/openai/resources/models.mjs","../../node_modules/openai/resources/moderations.mjs","../../node_modules/openai/resources/realtime/client-secrets.mjs","../../node_modules/openai/resources/realtime/realtime.mjs","../../node_modules/openai/lib/ResponsesParser.mjs","../../node_modules/openai/lib/responses/ResponseStream.mjs","../../node_modules/openai/resources/responses/input-items.mjs","../../node_modules/openai/resources/responses/responses.mjs","../../node_modules/openai/resources/uploads/parts.mjs","../../node_modules/openai/resources/uploads/uploads.mjs","../../node_modules/openai/resources/vector-stores/file-batches.mjs","../../node_modules/openai/lib/Util.mjs","../../node_modules/openai/resources/vector-stores/files.mjs","../../node_modules/openai/resources/vector-stores/vector-stores.mjs","../../node_modules/openai/resources/webhooks.mjs","../../node_modules/openai/client.mjs","../../src/popup/hooks/useModel.ts","../../src/popup/components/SettingsPanel.tsx","../../src/popup/components/AdvancedSettingsPanel.tsx","../../src/popup/components/OptionsGrid.tsx","../../src/popup/components/OperatingMode.tsx","../../src/popup/index.tsx","../../src/popup/components/App.tsx","../../src/popup/hooks/useConfig.ts"],"sourcesContent":["var n,l,u,t,i,r,o,e,f,c,s,a,h,p,v,y,d={},w=[],_=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,g=Array.isArray;function m(n,l){for(var u in l)n[u]=l[u];return n}function b(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function k(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return x(l,e,i,r,null)}function x(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function M(){return{current:null}}function S(n){return n.children}function C(n,l){this.props=n,this.context=l}function $(n,l){if(null==l)return n.__?$(n.__,n.__i+1):null;for(var u;ll&&i.sort(e),n=i.shift(),l=i.length,I(n)}finally{i.length=H.__r=0}}function L(n,l,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,g,m=t&&t.__k||w,b=l.length;for(f=T(u,l,m,f,b),a=0;a0?o=n.__k[r]=x(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=O(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:if?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r(s?1:0))for(i=u-1,r=u+1;i>=0||r=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function z(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||_.test(l)?u:u+\"px\"}function N(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||z(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||z(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(a,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u[s]=t[s]:(u[s]=h,n.addEventListener(l,r?v:p,r)):n.removeEventListener(l,r?v:p,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function V(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u[c])u[c]=h++;else if(u[c]0?n:g(n)?n.map(E):m({},n)}function G(u,t,i,r,o,e,f,c,s){var a,h,p,v,y,w,_,m=i.props||d,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a2&&(f.children=arguments.length>3?n.call(arguments,2):t),x(l.type,f,i||l.key,r||l.ref,null)}function X(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,A(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+y++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=w.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},C.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=m({},this.state),\"function\"==typeof n&&(n=n(m({},u),this.props)),n&&m(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),A(this))},C.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),A(this))},C.prototype.render=S,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},H.__r=0,f=Math.random().toString(8),c=\"__d\"+f,s=\"__a\"+f,a=/(PointerCapture)$|Capture$/i,h=0,p=V(!1),v=V(!0),y=0;export{C as Component,S as Fragment,W as cloneElement,X as createContext,k as createElement,M as createRef,k as h,U as hydrate,t as isValidElement,l as options,R as render,F as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","import{options as r,Fragment as e}from\"preact\";export{Fragment}from\"preact\";var t=/[\"&<]/;function n(r){if(0===r.length||!1===t.test(r))return r;for(var e=0,n=0,o=\"\",f=\"\";n= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n",null,"function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\")\n throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return kind === \"a\" ? f.call(receiver, value) : f ? (f.value = value) : state.set(receiver, value), value;\n}\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f)\n throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver))\n throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\nexport { __classPrivateFieldSet, __classPrivateFieldGet };\n","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * https://stackoverflow.com/a/2117523\n */\nexport let uuid4 = function () {\n const { crypto } = globalThis;\n if (crypto?.randomUUID) {\n uuid4 = crypto.randomUUID.bind(crypto);\n return crypto.randomUUID();\n }\n const u8 = new Uint8Array(1);\n const randomByte = crypto ? () => crypto.getRandomValues(u8)[0] : () => (Math.random() * 0xff) & 0xff;\n return '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, (c) => (+c ^ (randomByte() & (15 >> (+c / 4)))).toString(16));\n};\n//# sourceMappingURL=uuid.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function isAbortError(err) {\n return (typeof err === 'object' &&\n err !== null &&\n // Spec-compliant fetch implementations\n (('name' in err && err.name === 'AbortError') ||\n // Expo fetch\n ('message' in err && String(err.message).includes('FetchRequestCanceledException'))));\n}\nexport const castToError = (err) => {\n if (err instanceof Error)\n return err;\n if (typeof err === 'object' && err !== null) {\n try {\n if (Object.prototype.toString.call(err) === '[object Error]') {\n // @ts-ignore - not all envs have native support for cause yet\n const error = new Error(err.message, err.cause ? { cause: err.cause } : {});\n if (err.stack)\n error.stack = err.stack;\n // @ts-ignore - not all envs have native support for cause yet\n if (err.cause && !error.cause)\n error.cause = err.cause;\n if (err.name)\n error.name = err.name;\n return error;\n }\n }\n catch { }\n try {\n return new Error(JSON.stringify(err));\n }\n catch { }\n }\n return new Error(err);\n};\n//# sourceMappingURL=errors.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { castToError } from \"../internal/errors.mjs\";\nexport class OpenAIError extends Error {\n}\nexport class APIError extends OpenAIError {\n constructor(status, error, message, headers) {\n super(`${APIError.makeMessage(status, error, message)}`);\n this.status = status;\n this.headers = headers;\n this.requestID = headers?.get('x-request-id');\n this.error = error;\n const data = error;\n this.code = data?.['code'];\n this.param = data?.['param'];\n this.type = data?.['type'];\n }\n static makeMessage(status, error, message) {\n const msg = error?.message ?\n typeof error.message === 'string' ?\n error.message\n : JSON.stringify(error.message)\n : error ? JSON.stringify(error)\n : message;\n if (status && msg) {\n return `${status} ${msg}`;\n }\n if (status) {\n return `${status} status code (no body)`;\n }\n if (msg) {\n return msg;\n }\n return '(no status code or body)';\n }\n static generate(status, errorResponse, message, headers) {\n if (!status || !headers) {\n return new APIConnectionError({ message, cause: castToError(errorResponse) });\n }\n const error = errorResponse?.['error'];\n if (status === 400) {\n return new BadRequestError(status, error, message, headers);\n }\n if (status === 401) {\n return new AuthenticationError(status, error, message, headers);\n }\n if (status === 403) {\n return new PermissionDeniedError(status, error, message, headers);\n }\n if (status === 404) {\n return new NotFoundError(status, error, message, headers);\n }\n if (status === 409) {\n return new ConflictError(status, error, message, headers);\n }\n if (status === 422) {\n return new UnprocessableEntityError(status, error, message, headers);\n }\n if (status === 429) {\n return new RateLimitError(status, error, message, headers);\n }\n if (status >= 500) {\n return new InternalServerError(status, error, message, headers);\n }\n return new APIError(status, error, message, headers);\n }\n}\nexport class APIUserAbortError extends APIError {\n constructor({ message } = {}) {\n super(undefined, undefined, message || 'Request was aborted.', undefined);\n }\n}\nexport class APIConnectionError extends APIError {\n constructor({ message, cause }) {\n super(undefined, undefined, message || 'Connection error.', undefined);\n // in some environments the 'cause' property is already declared\n // @ts-ignore\n if (cause)\n this.cause = cause;\n }\n}\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor({ message } = {}) {\n super({ message: message ?? 'Request timed out.' });\n }\n}\nexport class BadRequestError extends APIError {\n}\nexport class AuthenticationError extends APIError {\n}\nexport class PermissionDeniedError extends APIError {\n}\nexport class NotFoundError extends APIError {\n}\nexport class ConflictError extends APIError {\n}\nexport class UnprocessableEntityError extends APIError {\n}\nexport class RateLimitError extends APIError {\n}\nexport class InternalServerError extends APIError {\n}\nexport class LengthFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the length limit was reached`);\n }\n}\nexport class ContentFilterFinishReasonError extends OpenAIError {\n constructor() {\n super(`Could not parse response content as the request was rejected by the content filter`);\n }\n}\nexport class InvalidWebhookSignatureError extends Error {\n constructor(message) {\n super(message);\n }\n}\n//# sourceMappingURL=error.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\n// https://url.spec.whatwg.org/#url-scheme-string\nconst startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;\nexport const isAbsoluteURL = (url) => {\n return startsWithSchemeRegexp.test(url);\n};\nexport let isArray = (val) => ((isArray = Array.isArray), isArray(val));\nexport let isReadonlyArray = isArray;\n/** Returns an object if the given value isn't an object, otherwise returns as-is */\nexport function maybeObj(x) {\n if (typeof x !== 'object') {\n return {};\n }\n return x ?? {};\n}\n// https://stackoverflow.com/a/34491287\nexport function isEmptyObj(obj) {\n if (!obj)\n return true;\n for (const _k in obj)\n return false;\n return true;\n}\n// https://eslint.org/docs/latest/rules/no-prototype-builtins\nexport function hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\nexport function isObj(obj) {\n return obj != null && typeof obj === 'object' && !Array.isArray(obj);\n}\nexport const ensurePresent = (value) => {\n if (value == null) {\n throw new OpenAIError(`Expected a value to be given but received ${value} instead.`);\n }\n return value;\n};\nexport const validatePositiveInteger = (name, n) => {\n if (typeof n !== 'number' || !Number.isInteger(n)) {\n throw new OpenAIError(`${name} must be an integer`);\n }\n if (n < 0) {\n throw new OpenAIError(`${name} must be a positive integer`);\n }\n return n;\n};\nexport const coerceInteger = (value) => {\n if (typeof value === 'number')\n return Math.round(value);\n if (typeof value === 'string')\n return parseInt(value, 10);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceFloat = (value) => {\n if (typeof value === 'number')\n return value;\n if (typeof value === 'string')\n return parseFloat(value);\n throw new OpenAIError(`Could not coerce ${value} (type: ${typeof value}) into a number`);\n};\nexport const coerceBoolean = (value) => {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string')\n return value === 'true';\n return Boolean(value);\n};\nexport const maybeCoerceInteger = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceInteger(value);\n};\nexport const maybeCoerceFloat = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceFloat(value);\n};\nexport const maybeCoerceBoolean = (value) => {\n if (value == null) {\n return undefined;\n }\n return coerceBoolean(value);\n};\nexport const safeJSON = (text) => {\n try {\n return JSON.parse(text);\n }\n catch (err) {\n return undefined;\n }\n};\n//# sourceMappingURL=values.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n//# sourceMappingURL=sleep.mjs.map","export const VERSION = '5.23.2'; // x-release-please-version\n//# sourceMappingURL=version.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { VERSION } from \"../version.mjs\";\nexport const isRunningInBrowser = () => {\n return (\n // @ts-ignore\n typeof window !== 'undefined' &&\n // @ts-ignore\n typeof window.document !== 'undefined' &&\n // @ts-ignore\n typeof navigator !== 'undefined');\n};\n/**\n * Note this does not detect 'browser'; for that, use getBrowserInfo().\n */\nfunction getDetectedPlatform() {\n if (typeof Deno !== 'undefined' && Deno.build != null) {\n return 'deno';\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return 'edge';\n }\n if (Object.prototype.toString.call(typeof globalThis.process !== 'undefined' ? globalThis.process : 0) === '[object process]') {\n return 'node';\n }\n return 'unknown';\n}\nconst getPlatformProperties = () => {\n const detectedPlatform = getDetectedPlatform();\n if (detectedPlatform === 'deno') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(Deno.build.os),\n 'X-Stainless-Arch': normalizeArch(Deno.build.arch),\n 'X-Stainless-Runtime': 'deno',\n 'X-Stainless-Runtime-Version': typeof Deno.version === 'string' ? Deno.version : Deno.version?.deno ?? 'unknown',\n };\n }\n if (typeof EdgeRuntime !== 'undefined') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': `other:${EdgeRuntime}`,\n 'X-Stainless-Runtime': 'edge',\n 'X-Stainless-Runtime-Version': globalThis.process.version,\n };\n }\n // Check if Node.js\n if (detectedPlatform === 'node') {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': normalizePlatform(globalThis.process.platform ?? 'unknown'),\n 'X-Stainless-Arch': normalizeArch(globalThis.process.arch ?? 'unknown'),\n 'X-Stainless-Runtime': 'node',\n 'X-Stainless-Runtime-Version': globalThis.process.version ?? 'unknown',\n };\n }\n const browserInfo = getBrowserInfo();\n if (browserInfo) {\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': `browser:${browserInfo.browser}`,\n 'X-Stainless-Runtime-Version': browserInfo.version,\n };\n }\n // TODO add support for Cloudflare workers, etc.\n return {\n 'X-Stainless-Lang': 'js',\n 'X-Stainless-Package-Version': VERSION,\n 'X-Stainless-OS': 'Unknown',\n 'X-Stainless-Arch': 'unknown',\n 'X-Stainless-Runtime': 'unknown',\n 'X-Stainless-Runtime-Version': 'unknown',\n };\n};\n// Note: modified from https://github.com/JS-DevTools/host-environment/blob/b1ab79ecde37db5d6e163c050e54fe7d287d7c92/src/isomorphic.browser.ts\nfunction getBrowserInfo() {\n if (typeof navigator === 'undefined' || !navigator) {\n return null;\n }\n // NOTE: The order matters here!\n const browserPatterns = [\n { key: 'edge', pattern: /Edge(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /MSIE(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'ie', pattern: /Trident(?:.*rv\\:(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'chrome', pattern: /Chrome(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'firefox', pattern: /Firefox(?:\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?/ },\n { key: 'safari', pattern: /(?:Version\\W+(\\d+)\\.(\\d+)(?:\\.(\\d+))?)?(?:\\W+Mobile\\S*)?\\W+Safari/ },\n ];\n // Find the FIRST matching browser\n for (const { key, pattern } of browserPatterns) {\n const match = pattern.exec(navigator.userAgent);\n if (match) {\n const major = match[1] || 0;\n const minor = match[2] || 0;\n const patch = match[3] || 0;\n return { browser: key, version: `${major}.${minor}.${patch}` };\n }\n }\n return null;\n}\nconst normalizeArch = (arch) => {\n // Node docs:\n // - https://nodejs.org/api/process.html#processarch\n // Deno docs:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n if (arch === 'x32')\n return 'x32';\n if (arch === 'x86_64' || arch === 'x64')\n return 'x64';\n if (arch === 'arm')\n return 'arm';\n if (arch === 'aarch64' || arch === 'arm64')\n return 'arm64';\n if (arch)\n return `other:${arch}`;\n return 'unknown';\n};\nconst normalizePlatform = (platform) => {\n // Node platforms:\n // - https://nodejs.org/api/process.html#processplatform\n // Deno platforms:\n // - https://doc.deno.land/deno/stable/~/Deno.build\n // - https://github.com/denoland/deno/issues/14799\n platform = platform.toLowerCase();\n // NOTE: this iOS check is untested and may not work\n // Node does not work natively on IOS, there is a fork at\n // https://github.com/nodejs-mobile/nodejs-mobile\n // however it is unknown at the time of writing how to detect if it is running\n if (platform.includes('ios'))\n return 'iOS';\n if (platform === 'android')\n return 'Android';\n if (platform === 'darwin')\n return 'MacOS';\n if (platform === 'win32')\n return 'Windows';\n if (platform === 'freebsd')\n return 'FreeBSD';\n if (platform === 'openbsd')\n return 'OpenBSD';\n if (platform === 'linux')\n return 'Linux';\n if (platform)\n return `Other:${platform}`;\n return 'Unknown';\n};\nlet _platformHeaders;\nexport const getPlatformHeaders = () => {\n return (_platformHeaders ?? (_platformHeaders = getPlatformProperties()));\n};\n//# sourceMappingURL=detect-platform.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport function getDefaultFetch() {\n if (typeof fetch !== 'undefined') {\n return fetch;\n }\n throw new Error('`fetch` is not defined as a global; Either pass `fetch` to the client, `new OpenAI({ fetch })` or polyfill the global, `globalThis.fetch = fetch`');\n}\nexport function makeReadableStream(...args) {\n const ReadableStream = globalThis.ReadableStream;\n if (typeof ReadableStream === 'undefined') {\n // Note: All of the platforms / runtimes we officially support already define\n // `ReadableStream` as a global, so this should only ever be hit on unsupported runtimes.\n throw new Error('`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`');\n }\n return new ReadableStream(...args);\n}\nexport function ReadableStreamFrom(iterable) {\n let iter = Symbol.asyncIterator in iterable ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();\n return makeReadableStream({\n start() { },\n async pull(controller) {\n const { done, value } = await iter.next();\n if (done) {\n controller.close();\n }\n else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n}\n/**\n * Most browsers don't yet have async iterable support for ReadableStream,\n * and Node has a very different way of reading bytes from its \"ReadableStream\".\n *\n * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490\n */\nexport function ReadableStreamToAsyncIterable(stream) {\n if (stream[Symbol.asyncIterator])\n return stream;\n const reader = stream.getReader();\n return {\n async next() {\n try {\n const result = await reader.read();\n if (result?.done)\n reader.releaseLock(); // release lock when stream becomes closed\n return result;\n }\n catch (e) {\n reader.releaseLock(); // release lock when stream becomes errored\n throw e;\n }\n },\n async return() {\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n return { done: true, value: undefined };\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n/**\n * Cancels a ReadableStream we don't need to consume.\n * See https://undici.nodejs.org/#/?id=garbage-collection\n */\nexport async function CancelReadableStream(stream) {\n if (stream === null || typeof stream !== 'object')\n return;\n if (stream[Symbol.asyncIterator]) {\n await stream[Symbol.asyncIterator]().return?.();\n return;\n }\n const reader = stream.getReader();\n const cancelPromise = reader.cancel();\n reader.releaseLock();\n await cancelPromise;\n}\n//# sourceMappingURL=shims.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport const FallbackEncoder = ({ headers, body }) => {\n return {\n bodyHeaders: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(body),\n };\n};\n//# sourceMappingURL=request-options.mjs.map","export const default_format = 'RFC3986';\nexport const default_formatter = (v) => String(v);\nexport const formatters = {\n RFC1738: (v) => String(v).replace(/%20/g, '+'),\n RFC3986: default_formatter,\n};\nexport const RFC1738 = 'RFC1738';\nexport const RFC3986 = 'RFC3986';\n//# sourceMappingURL=formats.mjs.map","import { RFC1738 } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nexport let has = (obj, key) => ((has = Object.hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),\n has(obj, key));\nconst hex_table = /* @__PURE__ */ (() => {\n const array = [];\n for (let i = 0; i < 256; ++i) {\n array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());\n }\n return array;\n})();\nfunction compact_queue(queue) {\n while (queue.length > 1) {\n const item = queue.pop();\n if (!item)\n continue;\n const obj = item.obj[item.prop];\n if (isArray(obj)) {\n const compacted = [];\n for (let j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== 'undefined') {\n compacted.push(obj[j]);\n }\n }\n // @ts-ignore\n item.obj[item.prop] = compacted;\n }\n }\n}\nfunction array_to_object(source, options) {\n const obj = options && options.plainObjects ? Object.create(null) : {};\n for (let i = 0; i < source.length; ++i) {\n if (typeof source[i] !== 'undefined') {\n obj[i] = source[i];\n }\n }\n return obj;\n}\nexport function merge(target, source, options = {}) {\n if (!source) {\n return target;\n }\n if (typeof source !== 'object') {\n if (isArray(target)) {\n target.push(source);\n }\n else if (target && typeof target === 'object') {\n if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {\n target[source] = true;\n }\n }\n else {\n return [target, source];\n }\n return target;\n }\n if (!target || typeof target !== 'object') {\n return [target].concat(source);\n }\n let mergeTarget = target;\n if (isArray(target) && !isArray(source)) {\n // @ts-ignore\n mergeTarget = array_to_object(target, options);\n }\n if (isArray(target) && isArray(source)) {\n source.forEach(function (item, i) {\n if (has(target, i)) {\n const targetItem = target[i];\n if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {\n target[i] = merge(targetItem, item, options);\n }\n else {\n target.push(item);\n }\n }\n else {\n target[i] = item;\n }\n });\n return target;\n }\n return Object.keys(source).reduce(function (acc, key) {\n const value = source[key];\n if (has(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n }\n else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n}\nexport function assign_single_source(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n}\nexport function decode(str, _, charset) {\n const strWithoutPlus = str.replace(/\\+/g, ' ');\n if (charset === 'iso-8859-1') {\n // unescape never throws, no try...catch needed:\n return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);\n }\n // utf-8\n try {\n return decodeURIComponent(strWithoutPlus);\n }\n catch (e) {\n return strWithoutPlus;\n }\n}\nconst limit = 1024;\nexport const encode = (str, _defaultEncoder, charset, _kind, format) => {\n // This code was originally written by Brian White for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n let string = str;\n if (typeof str === 'symbol') {\n string = Symbol.prototype.toString.call(str);\n }\n else if (typeof str !== 'string') {\n string = String(str);\n }\n if (charset === 'iso-8859-1') {\n return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) {\n return '%26%23' + parseInt($0.slice(2), 16) + '%3B';\n });\n }\n let out = '';\n for (let j = 0; j < string.length; j += limit) {\n const segment = string.length >= limit ? string.slice(j, j + limit) : string;\n const arr = [];\n for (let i = 0; i < segment.length; ++i) {\n let c = segment.charCodeAt(i);\n if (c === 0x2d || // -\n c === 0x2e || // .\n c === 0x5f || // _\n c === 0x7e || // ~\n (c >= 0x30 && c <= 0x39) || // 0-9\n (c >= 0x41 && c <= 0x5a) || // a-z\n (c >= 0x61 && c <= 0x7a) || // A-Z\n (format === RFC1738 && (c === 0x28 || c === 0x29)) // ( )\n ) {\n arr[arr.length] = segment.charAt(i);\n continue;\n }\n if (c < 0x80) {\n arr[arr.length] = hex_table[c];\n continue;\n }\n if (c < 0x800) {\n arr[arr.length] = hex_table[0xc0 | (c >> 6)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n if (c < 0xd800 || c >= 0xe000) {\n arr[arr.length] =\n hex_table[0xe0 | (c >> 12)] + hex_table[0x80 | ((c >> 6) & 0x3f)] + hex_table[0x80 | (c & 0x3f)];\n continue;\n }\n i += 1;\n c = 0x10000 + (((c & 0x3ff) << 10) | (segment.charCodeAt(i) & 0x3ff));\n arr[arr.length] =\n hex_table[0xf0 | (c >> 18)] +\n hex_table[0x80 | ((c >> 12) & 0x3f)] +\n hex_table[0x80 | ((c >> 6) & 0x3f)] +\n hex_table[0x80 | (c & 0x3f)];\n }\n out += arr.join('');\n }\n return out;\n};\nexport function compact(value) {\n const queue = [{ obj: { o: value }, prop: 'o' }];\n const refs = [];\n for (let i = 0; i < queue.length; ++i) {\n const item = queue[i];\n // @ts-ignore\n const obj = item.obj[item.prop];\n const keys = Object.keys(obj);\n for (let j = 0; j < keys.length; ++j) {\n const key = keys[j];\n const val = obj[key];\n if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n compact_queue(queue);\n return value;\n}\nexport function is_regexp(obj) {\n return Object.prototype.toString.call(obj) === '[object RegExp]';\n}\nexport function is_buffer(obj) {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n}\nexport function combine(a, b) {\n return [].concat(a, b);\n}\nexport function maybe_map(val, fn) {\n if (isArray(val)) {\n const mapped = [];\n for (let i = 0; i < val.length; i += 1) {\n mapped.push(fn(val[i]));\n }\n return mapped;\n }\n return fn(val);\n}\n//# sourceMappingURL=utils.mjs.map","import { encode, is_buffer, maybe_map, has } from \"./utils.mjs\";\nimport { default_format, default_formatter, formatters } from \"./formats.mjs\";\nimport { isArray } from \"../utils/values.mjs\";\nconst array_prefix_generators = {\n brackets(prefix) {\n return String(prefix) + '[]';\n },\n comma: 'comma',\n indices(prefix, key) {\n return String(prefix) + '[' + key + ']';\n },\n repeat(prefix) {\n return String(prefix);\n },\n};\nconst push_to_array = function (arr, value_or_array) {\n Array.prototype.push.apply(arr, isArray(value_or_array) ? value_or_array : [value_or_array]);\n};\nlet toISOString;\nconst defaults = {\n addQueryPrefix: false,\n allowDots: false,\n allowEmptyArrays: false,\n arrayFormat: 'indices',\n charset: 'utf-8',\n charsetSentinel: false,\n delimiter: '&',\n encode: true,\n encodeDotInKeys: false,\n encoder: encode,\n encodeValuesOnly: false,\n format: default_format,\n formatter: default_formatter,\n /** @deprecated */\n indices: false,\n serializeDate(date) {\n return (toISOString ?? (toISOString = Function.prototype.call.bind(Date.prototype.toISOString)))(date);\n },\n skipNulls: false,\n strictNullHandling: false,\n};\nfunction is_non_nullish_primitive(v) {\n return (typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n typeof v === 'symbol' ||\n typeof v === 'bigint');\n}\nconst sentinel = {};\nfunction inner_stringify(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {\n let obj = object;\n let tmp_sc = sideChannel;\n let step = 0;\n let find_flag = false;\n while ((tmp_sc = tmp_sc.get(sentinel)) !== void undefined && !find_flag) {\n // Where object last appeared in the ref tree\n const pos = tmp_sc.get(object);\n step += 1;\n if (typeof pos !== 'undefined') {\n if (pos === step) {\n throw new RangeError('Cyclic object value');\n }\n else {\n find_flag = true; // Break while\n }\n }\n if (typeof tmp_sc.get(sentinel) === 'undefined') {\n step = 0;\n }\n }\n if (typeof filter === 'function') {\n obj = filter(prefix, obj);\n }\n else if (obj instanceof Date) {\n obj = serializeDate?.(obj);\n }\n else if (generateArrayPrefix === 'comma' && isArray(obj)) {\n obj = maybe_map(obj, function (value) {\n if (value instanceof Date) {\n return serializeDate?.(value);\n }\n return value;\n });\n }\n if (obj === null) {\n if (strictNullHandling) {\n return encoder && !encodeValuesOnly ?\n // @ts-expect-error\n encoder(prefix, defaults.encoder, charset, 'key', format)\n : prefix;\n }\n obj = '';\n }\n if (is_non_nullish_primitive(obj) || is_buffer(obj)) {\n if (encoder) {\n const key_value = encodeValuesOnly ? prefix\n // @ts-expect-error\n : encoder(prefix, defaults.encoder, charset, 'key', format);\n return [\n formatter?.(key_value) +\n '=' +\n // @ts-expect-error\n formatter?.(encoder(obj, defaults.encoder, charset, 'value', format)),\n ];\n }\n return [formatter?.(prefix) + '=' + formatter?.(String(obj))];\n }\n const values = [];\n if (typeof obj === 'undefined') {\n return values;\n }\n let obj_keys;\n if (generateArrayPrefix === 'comma' && isArray(obj)) {\n // we need to join elements in\n if (encodeValuesOnly && encoder) {\n // @ts-expect-error values only\n obj = maybe_map(obj, encoder);\n }\n obj_keys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];\n }\n else if (isArray(filter)) {\n obj_keys = filter;\n }\n else {\n const keys = Object.keys(obj);\n obj_keys = sort ? keys.sort(sort) : keys;\n }\n const encoded_prefix = encodeDotInKeys ? String(prefix).replace(/\\./g, '%2E') : String(prefix);\n const adjusted_prefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? encoded_prefix + '[]' : encoded_prefix;\n if (allowEmptyArrays && isArray(obj) && obj.length === 0) {\n return adjusted_prefix + '[]';\n }\n for (let j = 0; j < obj_keys.length; ++j) {\n const key = obj_keys[j];\n const value = \n // @ts-ignore\n typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key];\n if (skipNulls && value === null) {\n continue;\n }\n // @ts-ignore\n const encoded_key = allowDots && encodeDotInKeys ? key.replace(/\\./g, '%2E') : key;\n const key_prefix = isArray(obj) ?\n typeof generateArrayPrefix === 'function' ?\n generateArrayPrefix(adjusted_prefix, encoded_key)\n : adjusted_prefix\n : adjusted_prefix + (allowDots ? '.' + encoded_key : '[' + encoded_key + ']');\n sideChannel.set(object, step);\n const valueSideChannel = new WeakMap();\n valueSideChannel.set(sentinel, sideChannel);\n push_to_array(values, inner_stringify(value, key_prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, \n // @ts-ignore\n generateArrayPrefix === 'comma' && encodeValuesOnly && isArray(obj) ? null : encoder, filter, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, valueSideChannel));\n }\n return values;\n}\nfunction normalize_stringify_options(opts = defaults) {\n if (typeof opts.allowEmptyArrays !== 'undefined' && typeof opts.allowEmptyArrays !== 'boolean') {\n throw new TypeError('`allowEmptyArrays` option can only be `true` or `false`, when provided');\n }\n if (typeof opts.encodeDotInKeys !== 'undefined' && typeof opts.encodeDotInKeys !== 'boolean') {\n throw new TypeError('`encodeDotInKeys` option can only be `true` or `false`, when provided');\n }\n if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') {\n throw new TypeError('Encoder has to be a function.');\n }\n const charset = opts.charset || defaults.charset;\n if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') {\n throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined');\n }\n let format = default_format;\n if (typeof opts.format !== 'undefined') {\n if (!has(formatters, opts.format)) {\n throw new TypeError('Unknown format option provided.');\n }\n format = opts.format;\n }\n const formatter = formatters[format];\n let filter = defaults.filter;\n if (typeof opts.filter === 'function' || isArray(opts.filter)) {\n filter = opts.filter;\n }\n let arrayFormat;\n if (opts.arrayFormat && opts.arrayFormat in array_prefix_generators) {\n arrayFormat = opts.arrayFormat;\n }\n else if ('indices' in opts) {\n arrayFormat = opts.indices ? 'indices' : 'repeat';\n }\n else {\n arrayFormat = defaults.arrayFormat;\n }\n if ('commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') {\n throw new TypeError('`commaRoundTrip` must be a boolean, or absent');\n }\n const allowDots = typeof opts.allowDots === 'undefined' ?\n !!opts.encodeDotInKeys === true ?\n true\n : defaults.allowDots\n : !!opts.allowDots;\n return {\n addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix,\n // @ts-ignore\n allowDots: allowDots,\n allowEmptyArrays: typeof opts.allowEmptyArrays === 'boolean' ? !!opts.allowEmptyArrays : defaults.allowEmptyArrays,\n arrayFormat: arrayFormat,\n charset: charset,\n charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel,\n commaRoundTrip: !!opts.commaRoundTrip,\n delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter,\n encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode,\n encodeDotInKeys: typeof opts.encodeDotInKeys === 'boolean' ? opts.encodeDotInKeys : defaults.encodeDotInKeys,\n encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder,\n encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly,\n filter: filter,\n format: format,\n formatter: formatter,\n serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate,\n skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls,\n // @ts-ignore\n sort: typeof opts.sort === 'function' ? opts.sort : null,\n strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling,\n };\n}\nexport function stringify(object, opts = {}) {\n let obj = object;\n const options = normalize_stringify_options(opts);\n let obj_keys;\n let filter;\n if (typeof options.filter === 'function') {\n filter = options.filter;\n obj = filter('', obj);\n }\n else if (isArray(options.filter)) {\n filter = options.filter;\n obj_keys = filter;\n }\n const keys = [];\n if (typeof obj !== 'object' || obj === null) {\n return '';\n }\n const generateArrayPrefix = array_prefix_generators[options.arrayFormat];\n const commaRoundTrip = generateArrayPrefix === 'comma' && options.commaRoundTrip;\n if (!obj_keys) {\n obj_keys = Object.keys(obj);\n }\n if (options.sort) {\n obj_keys.sort(options.sort);\n }\n const sideChannel = new WeakMap();\n for (let i = 0; i < obj_keys.length; ++i) {\n const key = obj_keys[i];\n if (options.skipNulls && obj[key] === null) {\n continue;\n }\n push_to_array(keys, inner_stringify(obj[key], key, \n // @ts-expect-error\n generateArrayPrefix, commaRoundTrip, options.allowEmptyArrays, options.strictNullHandling, options.skipNulls, options.encodeDotInKeys, options.encode ? options.encoder : null, options.filter, options.sort, options.allowDots, options.serializeDate, options.format, options.formatter, options.encodeValuesOnly, options.charset, sideChannel));\n }\n const joined = keys.join(options.delimiter);\n let prefix = options.addQueryPrefix === true ? '?' : '';\n if (options.charsetSentinel) {\n if (options.charset === 'iso-8859-1') {\n // encodeURIComponent('✓'), the \"numeric entity\" representation of a checkmark\n prefix += 'utf8=%26%2310003%3B&';\n }\n else {\n // encodeURIComponent('✓')\n prefix += 'utf8=%E2%9C%93&';\n }\n }\n return joined.length > 0 ? prefix + joined : '';\n}\n//# sourceMappingURL=stringify.mjs.map","export function concatBytes(buffers) {\n let length = 0;\n for (const buffer of buffers) {\n length += buffer.length;\n }\n const output = new Uint8Array(length);\n let index = 0;\n for (const buffer of buffers) {\n output.set(buffer, index);\n index += buffer.length;\n }\n return output;\n}\nlet encodeUTF8_;\nexport function encodeUTF8(str) {\n let encoder;\n return (encodeUTF8_ ??\n ((encoder = new globalThis.TextEncoder()), (encodeUTF8_ = encoder.encode.bind(encoder))))(str);\n}\nlet decodeUTF8_;\nexport function decodeUTF8(bytes) {\n let decoder;\n return (decodeUTF8_ ??\n ((decoder = new globalThis.TextDecoder()), (decodeUTF8_ = decoder.decode.bind(decoder))))(bytes);\n}\n//# sourceMappingURL=bytes.mjs.map","var _LineDecoder_buffer, _LineDecoder_carriageReturnIndex;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../tslib.mjs\";\nimport { concatBytes, decodeUTF8, encodeUTF8 } from \"../utils/bytes.mjs\";\n/**\n * A re-implementation of httpx's `LineDecoder` in Python that handles incrementally\n * reading lines from text.\n *\n * https://github.com/encode/httpx/blob/920333ea98118e9cf617f246905d7b202510941c/httpx/_decoders.py#L258\n */\nexport class LineDecoder {\n constructor() {\n _LineDecoder_buffer.set(this, void 0);\n _LineDecoder_carriageReturnIndex.set(this, void 0);\n __classPrivateFieldSet(this, _LineDecoder_buffer, new Uint8Array(), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n decode(chunk) {\n if (chunk == null) {\n return [];\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n __classPrivateFieldSet(this, _LineDecoder_buffer, concatBytes([__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), binaryChunk]), \"f\");\n const lines = [];\n let patternIndex;\n while ((patternIndex = findNewlineIndex(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\"), __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\"))) != null) {\n if (patternIndex.carriage && __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") == null) {\n // skip until we either get a corresponding `\\n`, a new `\\r` or nothing\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, patternIndex.index, \"f\");\n continue;\n }\n // we got double \\r or \\rtext\\n\n if (__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") != null &&\n (patternIndex.index !== __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") + 1 || patternIndex.carriage)) {\n lines.push(decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") - 1)));\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(__classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\")), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n continue;\n }\n const endIndex = __classPrivateFieldGet(this, _LineDecoder_carriageReturnIndex, \"f\") !== null ? patternIndex.preceding - 1 : patternIndex.preceding;\n const line = decodeUTF8(__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(0, endIndex));\n lines.push(line);\n __classPrivateFieldSet(this, _LineDecoder_buffer, __classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").subarray(patternIndex.index), \"f\");\n __classPrivateFieldSet(this, _LineDecoder_carriageReturnIndex, null, \"f\");\n }\n return lines;\n }\n flush() {\n if (!__classPrivateFieldGet(this, _LineDecoder_buffer, \"f\").length) {\n return [];\n }\n return this.decode('\\n');\n }\n}\n_LineDecoder_buffer = new WeakMap(), _LineDecoder_carriageReturnIndex = new WeakMap();\n// prettier-ignore\nLineDecoder.NEWLINE_CHARS = new Set(['\\n', '\\r']);\nLineDecoder.NEWLINE_REGEXP = /\\r\\n|[\\n\\r]/g;\n/**\n * This function searches the buffer for the end patterns, (\\r or \\n)\n * and returns an object with the index preceding the matched newline and the\n * index after the newline char. `null` is returned if no new line is found.\n *\n * ```ts\n * findNewLineIndex('abc\\ndef') -> { preceding: 2, index: 3 }\n * ```\n */\nfunction findNewlineIndex(buffer, startIndex) {\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = startIndex ?? 0; i < buffer.length; i++) {\n if (buffer[i] === newline) {\n return { preceding: i, index: i + 1, carriage: false };\n }\n if (buffer[i] === carriage) {\n return { preceding: i, index: i + 1, carriage: true };\n }\n }\n return null;\n}\nexport function findDoubleNewlineIndex(buffer) {\n // This function searches the buffer for the end patterns (\\r\\r, \\n\\n, \\r\\n\\r\\n)\n // and returns the index right after the first occurrence of any pattern,\n // or -1 if none of the patterns are found.\n const newline = 0x0a; // \\n\n const carriage = 0x0d; // \\r\n for (let i = 0; i < buffer.length - 1; i++) {\n if (buffer[i] === newline && buffer[i + 1] === newline) {\n // \\n\\n\n return i + 2;\n }\n if (buffer[i] === carriage && buffer[i + 1] === carriage) {\n // \\r\\r\n return i + 2;\n }\n if (buffer[i] === carriage &&\n buffer[i + 1] === newline &&\n i + 3 < buffer.length &&\n buffer[i + 2] === carriage &&\n buffer[i + 3] === newline) {\n // \\r\\n\\r\\n\n return i + 4;\n }\n }\n return -1;\n}\n//# sourceMappingURL=line.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { hasOwn } from \"./values.mjs\";\nconst levelNumbers = {\n off: 0,\n error: 200,\n warn: 300,\n info: 400,\n debug: 500,\n};\nexport const parseLogLevel = (maybeLevel, sourceName, client) => {\n if (!maybeLevel) {\n return undefined;\n }\n if (hasOwn(levelNumbers, maybeLevel)) {\n return maybeLevel;\n }\n loggerFor(client).warn(`${sourceName} was set to ${JSON.stringify(maybeLevel)}, expected one of ${JSON.stringify(Object.keys(levelNumbers))}`);\n return undefined;\n};\nfunction noop() { }\nfunction makeLogFn(fnLevel, logger, logLevel) {\n if (!logger || levelNumbers[fnLevel] > levelNumbers[logLevel]) {\n return noop;\n }\n else {\n // Don't wrap logger functions, we want the stacktrace intact!\n return logger[fnLevel].bind(logger);\n }\n}\nconst noopLogger = {\n error: noop,\n warn: noop,\n info: noop,\n debug: noop,\n};\nlet cachedLoggers = /* @__PURE__ */ new WeakMap();\nexport function loggerFor(client) {\n const logger = client.logger;\n const logLevel = client.logLevel ?? 'off';\n if (!logger) {\n return noopLogger;\n }\n const cachedLogger = cachedLoggers.get(logger);\n if (cachedLogger && cachedLogger[0] === logLevel) {\n return cachedLogger[1];\n }\n const levelLogger = {\n error: makeLogFn('error', logger, logLevel),\n warn: makeLogFn('warn', logger, logLevel),\n info: makeLogFn('info', logger, logLevel),\n debug: makeLogFn('debug', logger, logLevel),\n };\n cachedLoggers.set(logger, [logLevel, levelLogger]);\n return levelLogger;\n}\nexport const formatRequestDetails = (details) => {\n if (details.options) {\n details.options = { ...details.options };\n delete details.options['headers']; // redundant + leaks internals\n }\n if (details.headers) {\n details.headers = Object.fromEntries((details.headers instanceof Headers ? [...details.headers] : Object.entries(details.headers)).map(([name, value]) => [\n name,\n (name.toLowerCase() === 'authorization' ||\n name.toLowerCase() === 'cookie' ||\n name.toLowerCase() === 'set-cookie') ?\n '***'\n : value,\n ]));\n }\n if ('retryOfRequestLogID' in details) {\n if (details.retryOfRequestLogID) {\n details.retryOf = details.retryOfRequestLogID;\n }\n delete details.retryOfRequestLogID;\n }\n return details;\n};\n//# sourceMappingURL=log.mjs.map","var _Stream_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { makeReadableStream } from \"../internal/shims.mjs\";\nimport { findDoubleNewlineIndex, LineDecoder } from \"../internal/decoders/line.mjs\";\nimport { ReadableStreamToAsyncIterable } from \"../internal/shims.mjs\";\nimport { isAbortError } from \"../internal/errors.mjs\";\nimport { encodeUTF8 } from \"../internal/utils/bytes.mjs\";\nimport { loggerFor } from \"../internal/utils/log.mjs\";\nimport { APIError } from \"./error.mjs\";\nexport class Stream {\n constructor(iterator, controller, client) {\n this.iterator = iterator;\n _Stream_client.set(this, void 0);\n this.controller = controller;\n __classPrivateFieldSet(this, _Stream_client, client, \"f\");\n }\n static fromSSEResponse(response, controller, client) {\n let consumed = false;\n const logger = client ? loggerFor(client) : console;\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const sse of _iterSSEMessages(response, controller)) {\n if (done)\n continue;\n if (sse.data.startsWith('[DONE]')) {\n done = true;\n continue;\n }\n if (sse.event === null || !sse.event.startsWith('thread.')) {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n logger.error(`Could not parse message into JSON:`, sse.data);\n logger.error(`From chunk:`, sse.raw);\n throw e;\n }\n if (data && data.error) {\n throw new APIError(undefined, data.error, undefined, response.headers);\n }\n yield data;\n }\n else {\n let data;\n try {\n data = JSON.parse(sse.data);\n }\n catch (e) {\n console.error(`Could not parse message into JSON:`, sse.data);\n console.error(`From chunk:`, sse.raw);\n throw e;\n }\n // TODO: Is this where the error should be thrown?\n if (sse.event == 'error') {\n throw new APIError(undefined, data.error, data.message, undefined);\n }\n yield { event: sse.event, data: data };\n }\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n /**\n * Generates a Stream from a newline-separated ReadableStream\n * where each item is a JSON value.\n */\n static fromReadableStream(readableStream, controller, client) {\n let consumed = false;\n async function* iterLines() {\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(readableStream);\n for await (const chunk of iter) {\n for (const line of lineDecoder.decode(chunk)) {\n yield line;\n }\n }\n for (const line of lineDecoder.flush()) {\n yield line;\n }\n }\n async function* iterator() {\n if (consumed) {\n throw new OpenAIError('Cannot iterate over a consumed stream, use `.tee()` to split the stream.');\n }\n consumed = true;\n let done = false;\n try {\n for await (const line of iterLines()) {\n if (done)\n continue;\n if (line)\n yield JSON.parse(line);\n }\n done = true;\n }\n catch (e) {\n // If the user calls `stream.controller.abort()`, we should exit without throwing.\n if (isAbortError(e))\n return;\n throw e;\n }\n finally {\n // If the user `break`s, abort the ongoing request.\n if (!done)\n controller.abort();\n }\n }\n return new Stream(iterator, controller, client);\n }\n [(_Stream_client = new WeakMap(), Symbol.asyncIterator)]() {\n return this.iterator();\n }\n /**\n * Splits the stream into two streams which can be\n * independently read from at different speeds.\n */\n tee() {\n const left = [];\n const right = [];\n const iterator = this.iterator();\n const teeIterator = (queue) => {\n return {\n next: () => {\n if (queue.length === 0) {\n const result = iterator.next();\n left.push(result);\n right.push(result);\n }\n return queue.shift();\n },\n };\n };\n return [\n new Stream(() => teeIterator(left), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n new Stream(() => teeIterator(right), this.controller, __classPrivateFieldGet(this, _Stream_client, \"f\")),\n ];\n }\n /**\n * Converts this stream to a newline-separated ReadableStream of\n * JSON stringified values in the stream\n * which can be turned back into a Stream with `Stream.fromReadableStream()`.\n */\n toReadableStream() {\n const self = this;\n let iter;\n return makeReadableStream({\n async start() {\n iter = self[Symbol.asyncIterator]();\n },\n async pull(ctrl) {\n try {\n const { value, done } = await iter.next();\n if (done)\n return ctrl.close();\n const bytes = encodeUTF8(JSON.stringify(value) + '\\n');\n ctrl.enqueue(bytes);\n }\n catch (err) {\n ctrl.error(err);\n }\n },\n async cancel() {\n await iter.return?.();\n },\n });\n }\n}\nexport async function* _iterSSEMessages(response, controller) {\n if (!response.body) {\n controller.abort();\n if (typeof globalThis.navigator !== 'undefined' &&\n globalThis.navigator.product === 'ReactNative') {\n throw new OpenAIError(`The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api`);\n }\n throw new OpenAIError(`Attempted to iterate over a response with no body`);\n }\n const sseDecoder = new SSEDecoder();\n const lineDecoder = new LineDecoder();\n const iter = ReadableStreamToAsyncIterable(response.body);\n for await (const sseChunk of iterSSEChunks(iter)) {\n for (const line of lineDecoder.decode(sseChunk)) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n }\n for (const line of lineDecoder.flush()) {\n const sse = sseDecoder.decode(line);\n if (sse)\n yield sse;\n }\n}\n/**\n * Given an async iterable iterator, iterates over it and yields full\n * SSE chunks, i.e. yields when a double new-line is encountered.\n */\nasync function* iterSSEChunks(iterator) {\n let data = new Uint8Array();\n for await (const chunk of iterator) {\n if (chunk == null) {\n continue;\n }\n const binaryChunk = chunk instanceof ArrayBuffer ? new Uint8Array(chunk)\n : typeof chunk === 'string' ? encodeUTF8(chunk)\n : chunk;\n let newData = new Uint8Array(data.length + binaryChunk.length);\n newData.set(data);\n newData.set(binaryChunk, data.length);\n data = newData;\n let patternIndex;\n while ((patternIndex = findDoubleNewlineIndex(data)) !== -1) {\n yield data.slice(0, patternIndex);\n data = data.slice(patternIndex);\n }\n }\n if (data.length > 0) {\n yield data;\n }\n}\nclass SSEDecoder {\n constructor() {\n this.event = null;\n this.data = [];\n this.chunks = [];\n }\n decode(line) {\n if (line.endsWith('\\r')) {\n line = line.substring(0, line.length - 1);\n }\n if (!line) {\n // empty line and we didn't previously encounter any messages\n if (!this.event && !this.data.length)\n return null;\n const sse = {\n event: this.event,\n data: this.data.join('\\n'),\n raw: this.chunks,\n };\n this.event = null;\n this.data = [];\n this.chunks = [];\n return sse;\n }\n this.chunks.push(line);\n if (line.startsWith(':')) {\n return null;\n }\n let [fieldname, _, value] = partition(line, ':');\n if (value.startsWith(' ')) {\n value = value.substring(1);\n }\n if (fieldname === 'event') {\n this.event = value;\n }\n else if (fieldname === 'data') {\n this.data.push(value);\n }\n return null;\n }\n}\nfunction partition(str, delimiter) {\n const index = str.indexOf(delimiter);\n if (index !== -1) {\n return [str.substring(0, index), delimiter, str.substring(index + delimiter.length)];\n }\n return [str, '', ''];\n}\n//# sourceMappingURL=streaming.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _APIPromise_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { defaultParseResponse, addRequestID, } from \"../internal/parse.mjs\";\n/**\n * A subclass of `Promise` providing additional helper methods\n * for interacting with the SDK.\n */\nexport class APIPromise extends Promise {\n constructor(client, responsePromise, parseResponse = defaultParseResponse) {\n super((resolve) => {\n // this is maybe a bit weird but this has to be a no-op to not implicitly\n // parse the response body; instead .then, .catch, .finally are overridden\n // to parse the response\n resolve(null);\n });\n this.responsePromise = responsePromise;\n this.parseResponse = parseResponse;\n _APIPromise_client.set(this, void 0);\n __classPrivateFieldSet(this, _APIPromise_client, client, \"f\");\n }\n _thenUnwrap(transform) {\n return new APIPromise(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), this.responsePromise, async (client, props) => addRequestID(transform(await this.parseResponse(client, props), props), props.response));\n }\n /**\n * Gets the raw `Response` instance instead of parsing the response\n * data.\n *\n * If you want to parse the response body but still get the `Response`\n * instance, you can use {@link withResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n asResponse() {\n return this.responsePromise.then((p) => p.response);\n }\n /**\n * Gets the parsed response data, the raw `Response` instance and the ID of the request,\n * returned via the X-Request-ID header which is useful for debugging requests and reporting\n * issues to OpenAI.\n *\n * If you just want to get the raw `Response` instance without parsing it,\n * you can use {@link asResponse()}.\n *\n * 👋 Getting the wrong TypeScript type for `Response`?\n * Try setting `\"moduleResolution\": \"NodeNext\"` or add `\"lib\": [\"DOM\"]`\n * to your `tsconfig.json`.\n */\n async withResponse() {\n const [data, response] = await Promise.all([this.parse(), this.asResponse()]);\n return { data, response, request_id: response.headers.get('x-request-id') };\n }\n parse() {\n if (!this.parsedPromise) {\n this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(__classPrivateFieldGet(this, _APIPromise_client, \"f\"), data));\n }\n return this.parsedPromise;\n }\n then(onfulfilled, onrejected) {\n return this.parse().then(onfulfilled, onrejected);\n }\n catch(onrejected) {\n return this.parse().catch(onrejected);\n }\n finally(onfinally) {\n return this.parse().finally(onfinally);\n }\n}\n_APIPromise_client = new WeakMap();\n//# sourceMappingURL=api-promise.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _AbstractPage_client;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"./error.mjs\";\nimport { defaultParseResponse } from \"../internal/parse.mjs\";\nimport { APIPromise } from \"./api-promise.mjs\";\nimport { maybeObj } from \"../internal/utils/values.mjs\";\nexport class AbstractPage {\n constructor(client, response, body, options) {\n _AbstractPage_client.set(this, void 0);\n __classPrivateFieldSet(this, _AbstractPage_client, client, \"f\");\n this.options = options;\n this.response = response;\n this.body = body;\n }\n hasNextPage() {\n const items = this.getPaginatedItems();\n if (!items.length)\n return false;\n return this.nextPageRequestOptions() != null;\n }\n async getNextPage() {\n const nextOptions = this.nextPageRequestOptions();\n if (!nextOptions) {\n throw new OpenAIError('No next page expected; please check `.hasNextPage()` before calling `.getNextPage()`.');\n }\n return await __classPrivateFieldGet(this, _AbstractPage_client, \"f\").requestAPIList(this.constructor, nextOptions);\n }\n async *iterPages() {\n let page = this;\n yield page;\n while (page.hasNextPage()) {\n page = await page.getNextPage();\n yield page;\n }\n }\n async *[(_AbstractPage_client = new WeakMap(), Symbol.asyncIterator)]() {\n for await (const page of this.iterPages()) {\n for (const item of page.getPaginatedItems()) {\n yield item;\n }\n }\n }\n}\n/**\n * This subclass of Promise will resolve to an instantiated Page once the request completes.\n *\n * It also implements AsyncIterable to allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\nexport class PagePromise extends APIPromise {\n constructor(client, request, Page) {\n super(client, request, async (client, props) => new Page(client, props.response, await defaultParseResponse(client, props), props.options));\n }\n /**\n * Allow auto-paginating iteration on an unawaited list call, eg:\n *\n * for await (const item of client.items.list()) {\n * console.log(item)\n * }\n */\n async *[Symbol.asyncIterator]() {\n const page = await this;\n for await (const item of page) {\n yield item;\n }\n }\n}\n/**\n * Note: no pagination actually occurs yet, this is for forwards-compatibility.\n */\nexport class Page extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.object = body.object;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n nextPageRequestOptions() {\n return null;\n }\n}\nexport class CursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const data = this.getPaginatedItems();\n const id = data[data.length - 1]?.id;\n if (!id) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: id,\n },\n };\n }\n}\nexport class ConversationCursorPage extends AbstractPage {\n constructor(client, response, body, options) {\n super(client, response, body, options);\n this.data = body.data || [];\n this.has_more = body.has_more || false;\n this.last_id = body.last_id || '';\n }\n getPaginatedItems() {\n return this.data ?? [];\n }\n hasNextPage() {\n if (this.has_more === false) {\n return false;\n }\n return super.hasNextPage();\n }\n nextPageRequestOptions() {\n const cursor = this.last_id;\n if (!cursor) {\n return null;\n }\n return {\n ...this.options,\n query: {\n ...maybeObj(this.options.query),\n after: cursor,\n },\n };\n }\n}\n//# sourceMappingURL=pagination.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { Stream } from \"../core/streaming.mjs\";\nimport { formatRequestDetails, loggerFor } from \"./utils/log.mjs\";\nexport async function defaultParseResponse(client, props) {\n const { response, requestLogID, retryOfRequestLogID, startTime } = props;\n const body = await (async () => {\n if (props.options.stream) {\n loggerFor(client).debug('response', response.status, response.url, response.headers, response.body);\n // Note: there is an invariant here that isn't represented in the type system\n // that if you set `stream: true` the response type must also be `Stream`\n if (props.options.__streamClass) {\n return props.options.__streamClass.fromSSEResponse(response, props.controller, client);\n }\n return Stream.fromSSEResponse(response, props.controller, client);\n }\n // fetch refuses to read the body when the status code is 204.\n if (response.status === 204) {\n return null;\n }\n if (props.options.__binaryResponse) {\n return response;\n }\n const contentType = response.headers.get('content-type');\n const mediaType = contentType?.split(';')[0]?.trim();\n const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');\n if (isJSON) {\n const json = await response.json();\n return addRequestID(json, response);\n }\n const text = await response.text();\n return text;\n })();\n loggerFor(client).debug(`[${requestLogID}] response parsed`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n body,\n durationMs: Date.now() - startTime,\n }));\n return body;\n}\nexport function addRequestID(value, response) {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n return Object.defineProperty(value, '_request_id', {\n value: response.headers.get('x-request-id'),\n enumerable: false,\n });\n}\n//# sourceMappingURL=parse.mjs.map","import { ReadableStreamFrom } from \"./shims.mjs\";\nexport const checkFileSupport = () => {\n if (typeof File === 'undefined') {\n const { process } = globalThis;\n const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;\n throw new Error('`File` is not defined as a global, which is required for file uploads.' +\n (isOldNode ?\n \" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.\"\n : ''));\n }\n};\n/**\n * Construct a `File` instance. This is used to ensure a helpful error is thrown\n * for environments that don't define a global `File` yet.\n */\nexport function makeFile(fileBits, fileName, options) {\n checkFileSupport();\n return new File(fileBits, fileName ?? 'unknown_file', options);\n}\nexport function getName(value) {\n return (((typeof value === 'object' &&\n value !== null &&\n (('name' in value && value.name && String(value.name)) ||\n ('url' in value && value.url && String(value.url)) ||\n ('filename' in value && value.filename && String(value.filename)) ||\n ('path' in value && value.path && String(value.path)))) ||\n '')\n .split(/[\\\\/]/)\n .pop() || undefined);\n}\nexport const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';\n/**\n * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.\n * Otherwise returns the request as is.\n */\nexport const maybeMultipartFormRequestOptions = async (opts, fetch) => {\n if (!hasUploadableValue(opts.body))\n return opts;\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nexport const multipartFormRequestOptions = async (opts, fetch) => {\n return { ...opts, body: await createForm(opts.body, fetch) };\n};\nconst supportsFormDataMap = /* @__PURE__ */ new WeakMap();\n/**\n * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending\n * properly-encoded form data, it just stringifies the object, resulting in a request body of \"[object FormData]\".\n * This function detects if the fetch function provided supports the global FormData object to avoid\n * confusing error messages later on.\n */\nfunction supportsFormData(fetchObject) {\n const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;\n const cached = supportsFormDataMap.get(fetch);\n if (cached)\n return cached;\n const promise = (async () => {\n try {\n const FetchResponse = ('Response' in fetch ?\n fetch.Response\n : (await fetch('data:,')).constructor);\n const data = new FormData();\n if (data.toString() === (await new FetchResponse(data).text())) {\n return false;\n }\n return true;\n }\n catch {\n // avoid false negatives\n return true;\n }\n })();\n supportsFormDataMap.set(fetch, promise);\n return promise;\n}\nexport const createForm = async (body, fetch) => {\n if (!(await supportsFormData(fetch))) {\n throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');\n }\n const form = new FormData();\n await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value)));\n return form;\n};\n// We check for Blob not File because Bun.File doesn't inherit from File,\n// but they both inherit from Blob and have a `name` property at runtime.\nconst isNamedBlob = (value) => value instanceof Blob && 'name' in value;\nconst isUploadable = (value) => typeof value === 'object' &&\n value !== null &&\n (value instanceof Response || isAsyncIterable(value) || isNamedBlob(value));\nconst hasUploadableValue = (value) => {\n if (isUploadable(value))\n return true;\n if (Array.isArray(value))\n return value.some(hasUploadableValue);\n if (value && typeof value === 'object') {\n for (const k in value) {\n if (hasUploadableValue(value[k]))\n return true;\n }\n }\n return false;\n};\nconst addFormValue = async (form, key, value) => {\n if (value === undefined)\n return;\n if (value == null) {\n throw new TypeError(`Received null for \"${key}\"; to pass null in FormData, you must use the string 'null'`);\n }\n // TODO: make nested formats configurable\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n form.append(key, String(value));\n }\n else if (value instanceof Response) {\n form.append(key, makeFile([await value.blob()], getName(value)));\n }\n else if (isAsyncIterable(value)) {\n form.append(key, makeFile([await new Response(ReadableStreamFrom(value)).blob()], getName(value)));\n }\n else if (isNamedBlob(value)) {\n form.append(key, value, getName(value));\n }\n else if (Array.isArray(value)) {\n await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry)));\n }\n else if (typeof value === 'object') {\n await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop)));\n }\n else {\n throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);\n }\n};\n//# sourceMappingURL=uploads.mjs.map","import { getName, makeFile, isAsyncIterable } from \"./uploads.mjs\";\nimport { checkFileSupport } from \"./uploads.mjs\";\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isBlobLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.size === 'number' &&\n typeof value.type === 'string' &&\n typeof value.text === 'function' &&\n typeof value.slice === 'function' &&\n typeof value.arrayBuffer === 'function';\n/**\n * This check adds the arrayBuffer() method type because it is available and used at runtime\n */\nconst isFileLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.name === 'string' &&\n typeof value.lastModified === 'number' &&\n isBlobLike(value);\nconst isResponseLike = (value) => value != null &&\n typeof value === 'object' &&\n typeof value.url === 'string' &&\n typeof value.blob === 'function';\n/**\n * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats\n * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s\n * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible\n * @param {Object=} options additional properties\n * @param {string=} options.type the MIME type of the content\n * @param {number=} options.lastModified the last modified timestamp\n * @returns a {@link File} with the given properties\n */\nexport async function toFile(value, name, options) {\n checkFileSupport();\n // If it's a promise, resolve it.\n value = await value;\n // If we've been given a `File` we don't need to do anything\n if (isFileLike(value)) {\n if (value instanceof File) {\n return value;\n }\n return makeFile([await value.arrayBuffer()], value.name);\n }\n if (isResponseLike(value)) {\n const blob = await value.blob();\n name || (name = new URL(value.url).pathname.split(/[\\\\/]/).pop());\n return makeFile(await getBytes(blob), name, options);\n }\n const parts = await getBytes(value);\n name || (name = getName(value));\n if (!options?.type) {\n const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);\n if (typeof type === 'string') {\n options = { ...options, type };\n }\n }\n return makeFile(parts, name, options);\n}\nasync function getBytes(value) {\n let parts = [];\n if (typeof value === 'string' ||\n ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.\n value instanceof ArrayBuffer) {\n parts.push(value);\n }\n else if (isBlobLike(value)) {\n parts.push(value instanceof Blob ? value : await value.arrayBuffer());\n }\n else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.\n ) {\n for await (const chunk of value) {\n parts.push(...(await getBytes(chunk))); // TODO, consider validating?\n }\n }\n else {\n const constructor = value?.constructor?.name;\n throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);\n }\n return parts;\n}\nfunction propsForError(value) {\n if (typeof value !== 'object' || value === null)\n return '';\n const props = Object.getOwnPropertyNames(value);\n return `; props: [${props.map((p) => `\"${p}\"`).join(', ')}]`;\n}\n//# sourceMappingURL=to-file.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nexport class APIResource {\n constructor(client) {\n this._client = client;\n }\n}\n//# sourceMappingURL=resource.mjs.map","import { OpenAIError } from \"../../core/error.mjs\";\n/**\n * Percent-encode everything that isn't safe to have in a path without encoding safe chars.\n *\n * Taken from https://datatracker.ietf.org/doc/html/rfc3986#section-3.3:\n * > unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n * > sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n * > pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n */\nexport function encodeURIPath(str) {\n return str.replace(/[^A-Za-z0-9\\-._~!$&'()*+,;=:@]+/g, encodeURIComponent);\n}\nconst EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));\nexport const createPathTagFunction = (pathEncoder = encodeURIPath) => function path(statics, ...params) {\n // If there are no params, no processing is needed.\n if (statics.length === 1)\n return statics[0];\n let postPath = false;\n const invalidSegments = [];\n const path = statics.reduce((previousValue, currentValue, index) => {\n if (/[?#]/.test(currentValue)) {\n postPath = true;\n }\n const value = params[index];\n let encoded = (postPath ? encodeURIComponent : pathEncoder)('' + value);\n if (index !== params.length &&\n (value == null ||\n (typeof value === 'object' &&\n // handle values from other realms\n value.toString ===\n Object.getPrototypeOf(Object.getPrototypeOf(value.hasOwnProperty ?? EMPTY) ?? EMPTY)\n ?.toString))) {\n encoded = value + '';\n invalidSegments.push({\n start: previousValue.length + currentValue.length,\n length: encoded.length,\n error: `Value of type ${Object.prototype.toString\n .call(value)\n .slice(8, -1)} is not a valid path parameter`,\n });\n }\n return previousValue + currentValue + (index === params.length ? '' : encoded);\n }, '');\n const pathOnly = path.split(/[?#]/, 1)[0];\n const invalidSegmentPattern = /(?<=^|\\/)(?:\\.|%2e){1,2}(?=\\/|$)/gi;\n let match;\n // Find all invalid segments\n while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {\n invalidSegments.push({\n start: match.index,\n length: match[0].length,\n error: `Value \"${match[0]}\" can\\'t be safely passed as a path parameter`,\n });\n }\n invalidSegments.sort((a, b) => a.start - b.start);\n if (invalidSegments.length > 0) {\n let lastEnd = 0;\n const underline = invalidSegments.reduce((acc, segment) => {\n const spaces = ' '.repeat(segment.start - lastEnd);\n const arrows = '^'.repeat(segment.length);\n lastEnd = segment.start + segment.length;\n return acc + spaces + arrows;\n }, '');\n throw new OpenAIError(`Path parameters result in path with invalid segments:\\n${invalidSegments\n .map((e) => e.error)\n .join('\\n')}\\n${path}\\n${underline}`);\n }\n return path;\n};\n/**\n * URI-encodes path params and ensures no unsafe /./ or /../ path segments are introduced.\n */\nexport const path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);\n//# sourceMappingURL=path.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Messages extends APIResource {\n /**\n * Get the messages in a stored chat completion. Only Chat Completions that have\n * been created with the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletionStoreMessage of client.chat.completions.messages.list(\n * 'completion_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(completionID, query = {}, options) {\n return this._client.getAPIList(path `/chat/completions/${completionID}/messages`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=messages.mjs.map","import { ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError } from \"../error.mjs\";\nexport function isChatCompletionFunctionTool(tool) {\n return tool !== undefined && 'function' in tool && tool.function !== undefined;\n}\nexport function makeParseableResponseFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function makeParseableTextFormat(response_format, parser) {\n const obj = { ...response_format };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-response-format',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableResponseFormat(response_format) {\n return response_format?.['$brand'] === 'auto-parseable-response-format';\n}\nexport function makeParseableTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nexport function maybeParseChatCompletion(completion, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...completion,\n choices: completion.choices.map((choice) => {\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n parsed: null,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls,\n }\n : undefined),\n },\n };\n }),\n };\n }\n return parseChatCompletion(completion, params);\n}\nexport function parseChatCompletion(completion, params) {\n const choices = completion.choices.map((choice) => {\n if (choice.finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (choice.finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n assertToolCallsAreChatCompletionFunctionToolCalls(choice.message.tool_calls);\n return {\n ...choice,\n message: {\n ...choice.message,\n ...(choice.message.tool_calls ?\n {\n tool_calls: choice.message.tool_calls?.map((toolCall) => parseToolCall(params, toolCall)) ?? undefined,\n }\n : undefined),\n parsed: choice.message.content && !choice.message.refusal ?\n parseResponseFormat(params, choice.message.content)\n : null,\n },\n };\n });\n return { ...completion, choices };\n}\nfunction parseResponseFormat(params, content) {\n if (params.response_format?.type !== 'json_schema') {\n return null;\n }\n if (params.response_format?.type === 'json_schema') {\n if ('$parseRaw' in params.response_format) {\n const response_format = params.response_format;\n return response_format.$parseRaw(content);\n }\n return JSON.parse(content);\n }\n return null;\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name); // TS doesn't narrow based on isChatCompletionTool\n return {\n ...toolCall,\n function: {\n ...toolCall.function,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCall.function.arguments)\n : null,\n },\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params || !('tools' in params) || !params.tools) {\n return false;\n }\n const inputTool = params.tools?.find((inputTool) => isChatCompletionFunctionTool(inputTool) && inputTool.function?.name === toolCall.function.name);\n return (isChatCompletionFunctionTool(inputTool) &&\n (isAutoParsableTool(inputTool) || inputTool?.function.strict || false));\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.response_format)) {\n return true;\n }\n return (params.tools?.some((t) => isAutoParsableTool(t) || (t.type === 'function' && t.function.strict === true)) ?? false);\n}\nexport function assertToolCallsAreChatCompletionFunctionToolCalls(toolCalls) {\n for (const toolCall of toolCalls || []) {\n if (toolCall.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool calls are supported; Received \\`${toolCall.type}\\``);\n }\n }\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\n//# sourceMappingURL=parser.mjs.map","export const isAssistantMessage = (message) => {\n return message?.role === 'assistant';\n};\nexport const isToolMessage = (message) => {\n return message?.role === 'tool';\n};\nexport function isPresent(obj) {\n return obj != null;\n}\n//# sourceMappingURL=chatCompletionUtils.mjs.map","var _EventStream_instances, _EventStream_connectedPromise, _EventStream_resolveConnectedPromise, _EventStream_rejectConnectedPromise, _EventStream_endPromise, _EventStream_resolveEndPromise, _EventStream_rejectEndPromise, _EventStream_listeners, _EventStream_ended, _EventStream_errored, _EventStream_aborted, _EventStream_catchingPromiseCreated, _EventStream_handleError;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nexport class EventStream {\n constructor() {\n _EventStream_instances.add(this);\n this.controller = new AbortController();\n _EventStream_connectedPromise.set(this, void 0);\n _EventStream_resolveConnectedPromise.set(this, () => { });\n _EventStream_rejectConnectedPromise.set(this, () => { });\n _EventStream_endPromise.set(this, void 0);\n _EventStream_resolveEndPromise.set(this, () => { });\n _EventStream_rejectEndPromise.set(this, () => { });\n _EventStream_listeners.set(this, {});\n _EventStream_ended.set(this, false);\n _EventStream_errored.set(this, false);\n _EventStream_aborted.set(this, false);\n _EventStream_catchingPromiseCreated.set(this, false);\n __classPrivateFieldSet(this, _EventStream_connectedPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveConnectedPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectConnectedPromise, reject, \"f\");\n }), \"f\");\n __classPrivateFieldSet(this, _EventStream_endPromise, new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_resolveEndPromise, resolve, \"f\");\n __classPrivateFieldSet(this, _EventStream_rejectEndPromise, reject, \"f\");\n }), \"f\");\n // Don't let these promises cause unhandled rejection errors.\n // we will manually cause an unhandled rejection error later\n // if the user hasn't registered any error listener or called\n // any promise-returning method.\n __classPrivateFieldGet(this, _EventStream_connectedPromise, \"f\").catch(() => { });\n __classPrivateFieldGet(this, _EventStream_endPromise, \"f\").catch(() => { });\n }\n _run(executor) {\n // Unfortunately if we call `executor()` immediately we get runtime errors about\n // references to `this` before the `super()` constructor call returns.\n setTimeout(() => {\n executor().then(() => {\n this._emitFinal();\n this._emit('end');\n }, __classPrivateFieldGet(this, _EventStream_instances, \"m\", _EventStream_handleError).bind(this));\n }, 0);\n }\n _connected() {\n if (this.ended)\n return;\n __classPrivateFieldGet(this, _EventStream_resolveConnectedPromise, \"f\").call(this);\n this._emit('connect');\n }\n get ended() {\n return __classPrivateFieldGet(this, _EventStream_ended, \"f\");\n }\n get errored() {\n return __classPrivateFieldGet(this, _EventStream_errored, \"f\");\n }\n get aborted() {\n return __classPrivateFieldGet(this, _EventStream_aborted, \"f\");\n }\n abort() {\n this.controller.abort();\n }\n /**\n * Adds the listener function to the end of the listeners array for the event.\n * No checks are made to see if the listener has already been added. Multiple calls passing\n * the same combination of event and listener will result in the listener being added, and\n * called, multiple times.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n on(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener });\n return this;\n }\n /**\n * Removes the specified listener from the listener array for the event.\n * off() will remove, at most, one instance of a listener from the listener array. If any single\n * listener has been added multiple times to the listener array for the specified event, then\n * off() must be called multiple times to remove each instance.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n off(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (!listeners)\n return this;\n const index = listeners.findIndex((l) => l.listener === listener);\n if (index >= 0)\n listeners.splice(index, 1);\n return this;\n }\n /**\n * Adds a one-time listener function for the event. The next time the event is triggered,\n * this listener is removed and then invoked.\n * @returns this ChatCompletionStream, so that calls can be chained\n */\n once(event, listener) {\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] || (__classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = []);\n listeners.push({ listener, once: true });\n return this;\n }\n /**\n * This is similar to `.once()`, but returns a Promise that resolves the next time\n * the event is triggered, instead of calling a listener callback.\n * @returns a Promise that resolves the next time given event is triggered,\n * or rejects if an error is emitted. (If you request the 'error' event,\n * returns a promise that resolves with the error).\n *\n * Example:\n *\n * const message = await stream.emitted('message') // rejects if the stream errors\n */\n emitted(event) {\n return new Promise((resolve, reject) => {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n if (event !== 'error')\n this.once('error', reject);\n this.once(event, resolve);\n });\n }\n async done() {\n __classPrivateFieldSet(this, _EventStream_catchingPromiseCreated, true, \"f\");\n await __classPrivateFieldGet(this, _EventStream_endPromise, \"f\");\n }\n _emit(event, ...args) {\n // make sure we don't emit any events after end\n if (__classPrivateFieldGet(this, _EventStream_ended, \"f\")) {\n return;\n }\n if (event === 'end') {\n __classPrivateFieldSet(this, _EventStream_ended, true, \"f\");\n __classPrivateFieldGet(this, _EventStream_resolveEndPromise, \"f\").call(this);\n }\n const listeners = __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event];\n if (listeners) {\n __classPrivateFieldGet(this, _EventStream_listeners, \"f\")[event] = listeners.filter((l) => !l.once);\n listeners.forEach(({ listener }) => listener(...args));\n }\n if (event === 'abort') {\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n return;\n }\n if (event === 'error') {\n // NOTE: _emit('error', error) should only be called from #handleError().\n const error = args[0];\n if (!__classPrivateFieldGet(this, _EventStream_catchingPromiseCreated, \"f\") && !listeners?.length) {\n // Trigger an unhandled rejection if the user hasn't registered any error handlers.\n // If you are seeing stack traces here, make sure to handle errors via either:\n // - runner.on('error', () => ...)\n // - await runner.done()\n // - await runner.finalChatCompletion()\n // - etc.\n Promise.reject(error);\n }\n __classPrivateFieldGet(this, _EventStream_rejectConnectedPromise, \"f\").call(this, error);\n __classPrivateFieldGet(this, _EventStream_rejectEndPromise, \"f\").call(this, error);\n this._emit('end');\n }\n }\n _emitFinal() { }\n}\n_EventStream_connectedPromise = new WeakMap(), _EventStream_resolveConnectedPromise = new WeakMap(), _EventStream_rejectConnectedPromise = new WeakMap(), _EventStream_endPromise = new WeakMap(), _EventStream_resolveEndPromise = new WeakMap(), _EventStream_rejectEndPromise = new WeakMap(), _EventStream_listeners = new WeakMap(), _EventStream_ended = new WeakMap(), _EventStream_errored = new WeakMap(), _EventStream_aborted = new WeakMap(), _EventStream_catchingPromiseCreated = new WeakMap(), _EventStream_instances = new WeakSet(), _EventStream_handleError = function _EventStream_handleError(error) {\n __classPrivateFieldSet(this, _EventStream_errored, true, \"f\");\n if (error instanceof Error && error.name === 'AbortError') {\n error = new APIUserAbortError();\n }\n if (error instanceof APIUserAbortError) {\n __classPrivateFieldSet(this, _EventStream_aborted, true, \"f\");\n return this._emit('abort', error);\n }\n if (error instanceof OpenAIError) {\n return this._emit('error', error);\n }\n if (error instanceof Error) {\n const openAIError = new OpenAIError(error.message);\n // @ts-ignore\n openAIError.cause = error;\n return this._emit('error', openAIError);\n }\n return this._emit('error', new OpenAIError(String(error)));\n};\n//# sourceMappingURL=EventStream.mjs.map","var _AbstractChatCompletionRunner_instances, _AbstractChatCompletionRunner_getFinalContent, _AbstractChatCompletionRunner_getFinalMessage, _AbstractChatCompletionRunner_getFinalFunctionToolCall, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult, _AbstractChatCompletionRunner_calculateTotalUsage, _AbstractChatCompletionRunner_validateParams, _AbstractChatCompletionRunner_stringifyFunctionCallResult;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableTool, parseChatCompletion } from \"../lib/parser.mjs\";\nimport { isAssistantMessage, isToolMessage } from \"./chatCompletionUtils.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isRunnableFunctionWithParse, } from \"./RunnableFunction.mjs\";\nconst DEFAULT_MAX_CHAT_COMPLETIONS = 10;\nexport class AbstractChatCompletionRunner extends EventStream {\n constructor() {\n super(...arguments);\n _AbstractChatCompletionRunner_instances.add(this);\n this._chatCompletions = [];\n this.messages = [];\n }\n _addChatCompletion(chatCompletion) {\n this._chatCompletions.push(chatCompletion);\n this._emit('chatCompletion', chatCompletion);\n const message = chatCompletion.choices[0]?.message;\n if (message)\n this._addMessage(message);\n return chatCompletion;\n }\n _addMessage(message, emit = true) {\n if (!('content' in message))\n message.content = null;\n this.messages.push(message);\n if (emit) {\n this._emit('message', message);\n if (isToolMessage(message) && message.content) {\n // Note, this assumes that {role: 'tool', content: …} is always the result of a call of tool of type=function.\n this._emit('functionToolCallResult', message.content);\n }\n else if (isAssistantMessage(message) && message.tool_calls) {\n for (const tool_call of message.tool_calls) {\n if (tool_call.type === 'function') {\n this._emit('functionToolCall', tool_call.function);\n }\n }\n }\n }\n }\n /**\n * @returns a promise that resolves with the final ChatCompletion, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletion.\n */\n async finalChatCompletion() {\n await this.done();\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (!completion)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return completion;\n }\n /**\n * @returns a promise that resolves with the content of the final ChatCompletionMessage, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalContent() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n }\n /**\n * @returns a promise that resolves with the the final assistant ChatCompletionMessage response,\n * or rejects if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalMessage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n }\n /**\n * @returns a promise that resolves with the content of the final FunctionCall, or rejects\n * if an error occurred or the stream ended prematurely without producing a ChatCompletionMessage.\n */\n async finalFunctionToolCall() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n }\n async finalFunctionToolCallResult() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n }\n async totalUsage() {\n await this.done();\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this);\n }\n allChatCompletions() {\n return [...this._chatCompletions];\n }\n _emitFinal() {\n const completion = this._chatCompletions[this._chatCompletions.length - 1];\n if (completion)\n this._emit('finalChatCompletion', completion);\n const finalMessage = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this);\n if (finalMessage)\n this._emit('finalMessage', finalMessage);\n const finalContent = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalContent).call(this);\n if (finalContent)\n this._emit('finalContent', finalContent);\n const finalFunctionCall = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCall).call(this);\n if (finalFunctionCall)\n this._emit('finalFunctionToolCall', finalFunctionCall);\n const finalFunctionCallResult = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalFunctionToolCallResult).call(this);\n if (finalFunctionCallResult != null)\n this._emit('finalFunctionToolCallResult', finalFunctionCallResult);\n if (this._chatCompletions.some((c) => c.usage)) {\n this._emit('totalUsage', __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_calculateTotalUsage).call(this));\n }\n }\n async _createChatCompletion(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_validateParams).call(this, params);\n const chatCompletion = await client.chat.completions.create({ ...params, stream: false }, { ...options, signal: this.controller.signal });\n this._connected();\n return this._addChatCompletion(parseChatCompletion(chatCompletion, params));\n }\n async _runChatCompletion(client, params, options) {\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n return await this._createChatCompletion(client, params, options);\n }\n async _runTools(client, params, options) {\n const role = 'tool';\n const { tool_choice = 'auto', stream, ...restParams } = params;\n const singleFunctionToCall = typeof tool_choice !== 'string' && tool_choice.type === 'function' && tool_choice?.function?.name;\n const { maxChatCompletions = DEFAULT_MAX_CHAT_COMPLETIONS } = options || {};\n // TODO(someday): clean this logic up\n const inputTools = params.tools.map((tool) => {\n if (isAutoParsableTool(tool)) {\n if (!tool.$callback) {\n throw new OpenAIError('Tool given to `.runTools()` that does not have an associated function');\n }\n return {\n type: 'function',\n function: {\n function: tool.$callback,\n name: tool.function.name,\n description: tool.function.description || '',\n parameters: tool.function.parameters,\n parse: tool.$parseRaw,\n strict: true,\n },\n };\n }\n return tool;\n });\n const functionsByName = {};\n for (const f of inputTools) {\n if (f.type === 'function') {\n functionsByName[f.function.name || f.function.function.name] = f.function;\n }\n }\n const tools = 'tools' in params ?\n inputTools.map((t) => t.type === 'function' ?\n {\n type: 'function',\n function: {\n name: t.function.name || t.function.function.name,\n parameters: t.function.parameters,\n description: t.function.description,\n strict: t.function.strict,\n },\n }\n : t)\n : undefined;\n for (const message of params.messages) {\n this._addMessage(message, false);\n }\n for (let i = 0; i < maxChatCompletions; ++i) {\n const chatCompletion = await this._createChatCompletion(client, {\n ...restParams,\n tool_choice,\n tools,\n messages: [...this.messages],\n }, options);\n const message = chatCompletion.choices[0]?.message;\n if (!message) {\n throw new OpenAIError(`missing message in ChatCompletion response`);\n }\n if (!message.tool_calls?.length) {\n return;\n }\n for (const tool_call of message.tool_calls) {\n if (tool_call.type !== 'function')\n continue;\n const tool_call_id = tool_call.id;\n const { name, arguments: args } = tool_call.function;\n const fn = functionsByName[name];\n if (!fn) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. Available options are: ${Object.keys(functionsByName)\n .map((name) => JSON.stringify(name))\n .join(', ')}. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n else if (singleFunctionToCall && singleFunctionToCall !== name) {\n const content = `Invalid tool_call: ${JSON.stringify(name)}. ${JSON.stringify(singleFunctionToCall)} requested. Please try again`;\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n let parsed;\n try {\n parsed = isRunnableFunctionWithParse(fn) ? await fn.parse(args) : args;\n }\n catch (error) {\n const content = error instanceof Error ? error.message : String(error);\n this._addMessage({ role, tool_call_id, content });\n continue;\n }\n // @ts-expect-error it can't rule out `never` type.\n const rawContent = await fn.function(parsed, this);\n const content = __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_stringifyFunctionCallResult).call(this, rawContent);\n this._addMessage({ role, tool_call_id, content });\n if (singleFunctionToCall) {\n return;\n }\n }\n }\n return;\n }\n}\n_AbstractChatCompletionRunner_instances = new WeakSet(), _AbstractChatCompletionRunner_getFinalContent = function _AbstractChatCompletionRunner_getFinalContent() {\n return __classPrivateFieldGet(this, _AbstractChatCompletionRunner_instances, \"m\", _AbstractChatCompletionRunner_getFinalMessage).call(this).content ?? null;\n}, _AbstractChatCompletionRunner_getFinalMessage = function _AbstractChatCompletionRunner_getFinalMessage() {\n let i = this.messages.length;\n while (i-- > 0) {\n const message = this.messages[i];\n if (isAssistantMessage(message)) {\n // TODO: support audio here\n const ret = {\n ...message,\n content: message.content ?? null,\n refusal: message.refusal ?? null,\n };\n return ret;\n }\n }\n throw new OpenAIError('stream ended without producing a ChatCompletionMessage with role=assistant');\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCall = function _AbstractChatCompletionRunner_getFinalFunctionToolCall() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isAssistantMessage(message) && message?.tool_calls?.length) {\n return message.tool_calls.filter((x) => x.type === 'function').at(-1)?.function;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_getFinalFunctionToolCallResult = function _AbstractChatCompletionRunner_getFinalFunctionToolCallResult() {\n for (let i = this.messages.length - 1; i >= 0; i--) {\n const message = this.messages[i];\n if (isToolMessage(message) &&\n message.content != null &&\n typeof message.content === 'string' &&\n this.messages.some((x) => x.role === 'assistant' &&\n x.tool_calls?.some((y) => y.type === 'function' && y.id === message.tool_call_id))) {\n return message.content;\n }\n }\n return;\n}, _AbstractChatCompletionRunner_calculateTotalUsage = function _AbstractChatCompletionRunner_calculateTotalUsage() {\n const total = {\n completion_tokens: 0,\n prompt_tokens: 0,\n total_tokens: 0,\n };\n for (const { usage } of this._chatCompletions) {\n if (usage) {\n total.completion_tokens += usage.completion_tokens;\n total.prompt_tokens += usage.prompt_tokens;\n total.total_tokens += usage.total_tokens;\n }\n }\n return total;\n}, _AbstractChatCompletionRunner_validateParams = function _AbstractChatCompletionRunner_validateParams(params) {\n if (params.n != null && params.n > 1) {\n throw new OpenAIError('ChatCompletion convenience helpers only support n=1 at this time. To use n>1, please use chat.completions.create() directly.');\n }\n}, _AbstractChatCompletionRunner_stringifyFunctionCallResult = function _AbstractChatCompletionRunner_stringifyFunctionCallResult(rawContent) {\n return (typeof rawContent === 'string' ? rawContent\n : rawContent === undefined ? 'undefined'\n : JSON.stringify(rawContent));\n};\n//# sourceMappingURL=AbstractChatCompletionRunner.mjs.map","export function isRunnableFunctionWithParse(fn) {\n return typeof fn.parse === 'function';\n}\n/**\n * This is helper class for passing a `function` and `parse` where the `function`\n * argument type matches the `parse` return type.\n */\nexport class ParsingToolFunction {\n constructor(input) {\n this.type = 'function';\n this.function = input;\n }\n}\n//# sourceMappingURL=RunnableFunction.mjs.map","import { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nimport { isAssistantMessage } from \"./chatCompletionUtils.mjs\";\nexport class ChatCompletionRunner extends AbstractChatCompletionRunner {\n static runTools(client, params, options) {\n const runner = new ChatCompletionRunner();\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n _addMessage(message, emit = true) {\n super._addMessage(message, emit);\n if (isAssistantMessage(message) && message.content) {\n this._emit('content', message.content);\n }\n }\n}\n//# sourceMappingURL=ChatCompletionRunner.mjs.map","const STR = 0b000000001;\nconst NUM = 0b000000010;\nconst ARR = 0b000000100;\nconst OBJ = 0b000001000;\nconst NULL = 0b000010000;\nconst BOOL = 0b000100000;\nconst NAN = 0b001000000;\nconst INFINITY = 0b010000000;\nconst MINUS_INFINITY = 0b100000000;\nconst INF = INFINITY | MINUS_INFINITY;\nconst SPECIAL = NULL | BOOL | INF | NAN;\nconst ATOM = STR | NUM | SPECIAL;\nconst COLLECTION = ARR | OBJ;\nconst ALL = ATOM | COLLECTION;\nconst Allow = {\n STR,\n NUM,\n ARR,\n OBJ,\n NULL,\n BOOL,\n NAN,\n INFINITY,\n MINUS_INFINITY,\n INF,\n SPECIAL,\n ATOM,\n COLLECTION,\n ALL,\n};\n// The JSON string segment was unable to be parsed completely\nclass PartialJSON extends Error {\n}\nclass MalformedJSON extends Error {\n}\n/**\n * Parse incomplete JSON\n * @param {string} jsonString Partial JSON to be parsed\n * @param {number} allowPartial Specify what types are allowed to be partial, see {@link Allow} for details\n * @returns The parsed JSON\n * @throws {PartialJSON} If the JSON is incomplete (related to the `allow` parameter)\n * @throws {MalformedJSON} If the JSON is malformed\n */\nfunction parseJSON(jsonString, allowPartial = Allow.ALL) {\n if (typeof jsonString !== 'string') {\n throw new TypeError(`expecting str, got ${typeof jsonString}`);\n }\n if (!jsonString.trim()) {\n throw new Error(`${jsonString} is empty`);\n }\n return _parseJSON(jsonString.trim(), allowPartial);\n}\nconst _parseJSON = (jsonString, allow) => {\n const length = jsonString.length;\n let index = 0;\n const markPartialJSON = (msg) => {\n throw new PartialJSON(`${msg} at position ${index}`);\n };\n const throwMalformedError = (msg) => {\n throw new MalformedJSON(`${msg} at position ${index}`);\n };\n const parseAny = () => {\n skipBlank();\n if (index >= length)\n markPartialJSON('Unexpected end of input');\n if (jsonString[index] === '\"')\n return parseStr();\n if (jsonString[index] === '{')\n return parseObj();\n if (jsonString[index] === '[')\n return parseArr();\n if (jsonString.substring(index, index + 4) === 'null' ||\n (Allow.NULL & allow && length - index < 4 && 'null'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return null;\n }\n if (jsonString.substring(index, index + 4) === 'true' ||\n (Allow.BOOL & allow && length - index < 4 && 'true'.startsWith(jsonString.substring(index)))) {\n index += 4;\n return true;\n }\n if (jsonString.substring(index, index + 5) === 'false' ||\n (Allow.BOOL & allow && length - index < 5 && 'false'.startsWith(jsonString.substring(index)))) {\n index += 5;\n return false;\n }\n if (jsonString.substring(index, index + 8) === 'Infinity' ||\n (Allow.INFINITY & allow && length - index < 8 && 'Infinity'.startsWith(jsonString.substring(index)))) {\n index += 8;\n return Infinity;\n }\n if (jsonString.substring(index, index + 9) === '-Infinity' ||\n (Allow.MINUS_INFINITY & allow &&\n 1 < length - index &&\n length - index < 9 &&\n '-Infinity'.startsWith(jsonString.substring(index)))) {\n index += 9;\n return -Infinity;\n }\n if (jsonString.substring(index, index + 3) === 'NaN' ||\n (Allow.NAN & allow && length - index < 3 && 'NaN'.startsWith(jsonString.substring(index)))) {\n index += 3;\n return NaN;\n }\n return parseNum();\n };\n const parseStr = () => {\n const start = index;\n let escape = false;\n index++; // skip initial quote\n while (index < length && (jsonString[index] !== '\"' || (escape && jsonString[index - 1] === '\\\\'))) {\n escape = jsonString[index] === '\\\\' ? !escape : false;\n index++;\n }\n if (jsonString.charAt(index) == '\"') {\n try {\n return JSON.parse(jsonString.substring(start, ++index - Number(escape)));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n else if (Allow.STR & allow) {\n try {\n return JSON.parse(jsonString.substring(start, index - Number(escape)) + '\"');\n }\n catch (e) {\n // SyntaxError: Invalid escape sequence\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('\\\\')) + '\"');\n }\n }\n markPartialJSON('Unterminated string literal');\n };\n const parseObj = () => {\n index++; // skip initial brace\n skipBlank();\n const obj = {};\n try {\n while (jsonString[index] !== '}') {\n skipBlank();\n if (index >= length && Allow.OBJ & allow)\n return obj;\n const key = parseStr();\n skipBlank();\n index++; // skip colon\n try {\n const value = parseAny();\n Object.defineProperty(obj, key, { value, writable: true, enumerable: true, configurable: true });\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n throw e;\n }\n skipBlank();\n if (jsonString[index] === ',')\n index++; // skip comma\n }\n }\n catch (e) {\n if (Allow.OBJ & allow)\n return obj;\n else\n markPartialJSON(\"Expected '}' at end of object\");\n }\n index++; // skip final brace\n return obj;\n };\n const parseArr = () => {\n index++; // skip initial bracket\n const arr = [];\n try {\n while (jsonString[index] !== ']') {\n arr.push(parseAny());\n skipBlank();\n if (jsonString[index] === ',') {\n index++; // skip comma\n }\n }\n }\n catch (e) {\n if (Allow.ARR & allow) {\n return arr;\n }\n markPartialJSON(\"Expected ']' at end of array\");\n }\n index++; // skip final bracket\n return arr;\n };\n const parseNum = () => {\n if (index === 0) {\n if (jsonString === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString);\n }\n catch (e) {\n if (Allow.NUM & allow) {\n try {\n if ('.' === jsonString[jsonString.length - 1])\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('.')));\n return JSON.parse(jsonString.substring(0, jsonString.lastIndexOf('e')));\n }\n catch (e) { }\n }\n throwMalformedError(String(e));\n }\n }\n const start = index;\n if (jsonString[index] === '-')\n index++;\n while (jsonString[index] && !',]}'.includes(jsonString[index]))\n index++;\n if (index == length && !(Allow.NUM & allow))\n markPartialJSON('Unterminated number literal');\n try {\n return JSON.parse(jsonString.substring(start, index));\n }\n catch (e) {\n if (jsonString.substring(start, index) === '-' && Allow.NUM & allow)\n markPartialJSON(\"Not sure what '-' is\");\n try {\n return JSON.parse(jsonString.substring(start, jsonString.lastIndexOf('e')));\n }\n catch (e) {\n throwMalformedError(String(e));\n }\n }\n };\n const skipBlank = () => {\n while (index < length && ' \\n\\r\\t'.includes(jsonString[index])) {\n index++;\n }\n };\n return parseAny();\n};\n// using this function with malformed JSON is undefined behavior\nconst partialParse = (input) => parseJSON(input, Allow.ALL ^ Allow.NUM);\nexport { partialParse, PartialJSON, MalformedJSON };\n//# sourceMappingURL=parser.mjs.map","var _ChatCompletionStream_instances, _ChatCompletionStream_params, _ChatCompletionStream_choiceEventStates, _ChatCompletionStream_currentChatCompletionSnapshot, _ChatCompletionStream_beginRequest, _ChatCompletionStream_getChoiceEventState, _ChatCompletionStream_addChunk, _ChatCompletionStream_emitToolCallDoneEvent, _ChatCompletionStream_emitContentDoneEvents, _ChatCompletionStream_endRequest, _ChatCompletionStream_getAutoParseableResponseFormat, _ChatCompletionStream_accumulateChatCompletion;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { partialParse } from \"../_vendor/partial-json-parser/parser.mjs\";\nimport { APIUserAbortError, ContentFilterFinishReasonError, LengthFinishReasonError, OpenAIError, } from \"../error.mjs\";\nimport { hasAutoParseableInput, isAutoParsableResponseFormat, isAutoParsableTool, isChatCompletionFunctionTool, maybeParseChatCompletion, shouldParseToolCall, } from \"../lib/parser.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { AbstractChatCompletionRunner, } from \"./AbstractChatCompletionRunner.mjs\";\nexport class ChatCompletionStream extends AbstractChatCompletionRunner {\n constructor(params) {\n super();\n _ChatCompletionStream_instances.add(this);\n _ChatCompletionStream_params.set(this, void 0);\n _ChatCompletionStream_choiceEventStates.set(this, void 0);\n _ChatCompletionStream_currentChatCompletionSnapshot.set(this, void 0);\n __classPrivateFieldSet(this, _ChatCompletionStream_params, params, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n }\n get currentChatCompletionSnapshot() {\n return __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n }\n /**\n * Intended for use on the frontend, consuming a stream produced with\n * `.toReadableStream()` on the backend.\n *\n * Note that messages sent to the model do not appear in `.on('message')`\n * in this context.\n */\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStream(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static createChatCompletion(client, params, options) {\n const runner = new ChatCompletionStream(params);\n runner._run(() => runner._runChatCompletion(client, { ...params, stream: true }, { ...options, headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' } }));\n return runner;\n }\n async _createChatCompletion(client, params, options) {\n super._createChatCompletion;\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n const stream = await client.chat.completions.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const chunk of stream) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_beginRequest).call(this);\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n let chatId;\n for await (const chunk of stream) {\n if (chatId && chatId !== chunk.id) {\n // A new request has been made.\n this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_addChunk).call(this, chunk);\n chatId = chunk.id;\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addChatCompletion(__classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_endRequest).call(this));\n }\n [(_ChatCompletionStream_params = new WeakMap(), _ChatCompletionStream_choiceEventStates = new WeakMap(), _ChatCompletionStream_currentChatCompletionSnapshot = new WeakMap(), _ChatCompletionStream_instances = new WeakSet(), _ChatCompletionStream_beginRequest = function _ChatCompletionStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n }, _ChatCompletionStream_getChoiceEventState = function _ChatCompletionStream_getChoiceEventState(choice) {\n let state = __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index];\n if (state) {\n return state;\n }\n state = {\n content_done: false,\n refusal_done: false,\n logprobs_content_done: false,\n logprobs_refusal_done: false,\n done_tool_calls: new Set(),\n current_tool_call_index: null,\n };\n __classPrivateFieldGet(this, _ChatCompletionStream_choiceEventStates, \"f\")[choice.index] = state;\n return state;\n }, _ChatCompletionStream_addChunk = function _ChatCompletionStream_addChunk(chunk) {\n if (this.ended)\n return;\n const completion = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_accumulateChatCompletion).call(this, chunk);\n this._emit('chunk', chunk, completion);\n for (const choice of chunk.choices) {\n const choiceSnapshot = completion.choices[choice.index];\n if (choice.delta.content != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.content) {\n this._emit('content', choice.delta.content, choiceSnapshot.message.content);\n this._emit('content.delta', {\n delta: choice.delta.content,\n snapshot: choiceSnapshot.message.content,\n parsed: choiceSnapshot.message.parsed,\n });\n }\n if (choice.delta.refusal != null &&\n choiceSnapshot.message?.role === 'assistant' &&\n choiceSnapshot.message?.refusal) {\n this._emit('refusal.delta', {\n delta: choice.delta.refusal,\n snapshot: choiceSnapshot.message.refusal,\n });\n }\n if (choice.logprobs?.content != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.content.delta', {\n content: choice.logprobs?.content,\n snapshot: choiceSnapshot.logprobs?.content ?? [],\n });\n }\n if (choice.logprobs?.refusal != null && choiceSnapshot.message?.role === 'assistant') {\n this._emit('logprobs.refusal.delta', {\n refusal: choice.logprobs?.refusal,\n snapshot: choiceSnapshot.logprobs?.refusal ?? [],\n });\n }\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.finish_reason) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n for (const toolCall of choice.delta.tool_calls ?? []) {\n if (state.current_tool_call_index !== toolCall.index) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitContentDoneEvents).call(this, choiceSnapshot);\n // new tool call started, the previous one is done\n if (state.current_tool_call_index != null) {\n __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_emitToolCallDoneEvent).call(this, choiceSnapshot, state.current_tool_call_index);\n }\n }\n state.current_tool_call_index = toolCall.index;\n }\n for (const toolCallDelta of choice.delta.tool_calls ?? []) {\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallDelta.index];\n if (!toolCallSnapshot?.type) {\n continue;\n }\n if (toolCallSnapshot?.type === 'function') {\n this._emit('tool_calls.function.arguments.delta', {\n name: toolCallSnapshot.function?.name,\n index: toolCallDelta.index,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: toolCallSnapshot.function.parsed_arguments,\n arguments_delta: toolCallDelta.function?.arguments ?? '',\n });\n }\n else {\n assertNever(toolCallSnapshot?.type);\n }\n }\n }\n }, _ChatCompletionStream_emitToolCallDoneEvent = function _ChatCompletionStream_emitToolCallDoneEvent(choiceSnapshot, toolCallIndex) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (state.done_tool_calls.has(toolCallIndex)) {\n // we've already fired the done event\n return;\n }\n const toolCallSnapshot = choiceSnapshot.message.tool_calls?.[toolCallIndex];\n if (!toolCallSnapshot) {\n throw new Error('no tool call snapshot');\n }\n if (!toolCallSnapshot.type) {\n throw new Error('tool call snapshot missing `type`');\n }\n if (toolCallSnapshot.type === 'function') {\n const inputTool = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.tools?.find((tool) => isChatCompletionFunctionTool(tool) && tool.function.name === toolCallSnapshot.function.name); // TS doesn't narrow based on isChatCompletionTool\n this._emit('tool_calls.function.arguments.done', {\n name: toolCallSnapshot.function.name,\n index: toolCallIndex,\n arguments: toolCallSnapshot.function.arguments,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCallSnapshot.function.arguments)\n : inputTool?.function.strict ? JSON.parse(toolCallSnapshot.function.arguments)\n : null,\n });\n }\n else {\n assertNever(toolCallSnapshot.type);\n }\n }, _ChatCompletionStream_emitContentDoneEvents = function _ChatCompletionStream_emitContentDoneEvents(choiceSnapshot) {\n const state = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getChoiceEventState).call(this, choiceSnapshot);\n if (choiceSnapshot.message.content && !state.content_done) {\n state.content_done = true;\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this);\n this._emit('content.done', {\n content: choiceSnapshot.message.content,\n parsed: responseFormat ? responseFormat.$parseRaw(choiceSnapshot.message.content) : null,\n });\n }\n if (choiceSnapshot.message.refusal && !state.refusal_done) {\n state.refusal_done = true;\n this._emit('refusal.done', { refusal: choiceSnapshot.message.refusal });\n }\n if (choiceSnapshot.logprobs?.content && !state.logprobs_content_done) {\n state.logprobs_content_done = true;\n this._emit('logprobs.content.done', { content: choiceSnapshot.logprobs.content });\n }\n if (choiceSnapshot.logprobs?.refusal && !state.logprobs_refusal_done) {\n state.logprobs_refusal_done = true;\n this._emit('logprobs.refusal.done', { refusal: choiceSnapshot.logprobs.refusal });\n }\n }, _ChatCompletionStream_endRequest = function _ChatCompletionStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any chunks`);\n }\n __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, undefined, \"f\");\n __classPrivateFieldSet(this, _ChatCompletionStream_choiceEventStates, [], \"f\");\n return finalizeChatCompletion(snapshot, __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"));\n }, _ChatCompletionStream_getAutoParseableResponseFormat = function _ChatCompletionStream_getAutoParseableResponseFormat() {\n const responseFormat = __classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\")?.response_format;\n if (isAutoParsableResponseFormat(responseFormat)) {\n return responseFormat;\n }\n return null;\n }, _ChatCompletionStream_accumulateChatCompletion = function _ChatCompletionStream_accumulateChatCompletion(chunk) {\n var _a, _b, _c, _d;\n let snapshot = __classPrivateFieldGet(this, _ChatCompletionStream_currentChatCompletionSnapshot, \"f\");\n const { choices, ...rest } = chunk;\n if (!snapshot) {\n snapshot = __classPrivateFieldSet(this, _ChatCompletionStream_currentChatCompletionSnapshot, {\n ...rest,\n choices: [],\n }, \"f\");\n }\n else {\n Object.assign(snapshot, rest);\n }\n for (const { delta, finish_reason, index, logprobs = null, ...other } of chunk.choices) {\n let choice = snapshot.choices[index];\n if (!choice) {\n choice = snapshot.choices[index] = { finish_reason, index, message: {}, logprobs, ...other };\n }\n if (logprobs) {\n if (!choice.logprobs) {\n choice.logprobs = Object.assign({}, logprobs);\n }\n else {\n const { content, refusal, ...rest } = logprobs;\n assertIsEmpty(rest);\n Object.assign(choice.logprobs, rest);\n if (content) {\n (_a = choice.logprobs).content ?? (_a.content = []);\n choice.logprobs.content.push(...content);\n }\n if (refusal) {\n (_b = choice.logprobs).refusal ?? (_b.refusal = []);\n choice.logprobs.refusal.push(...refusal);\n }\n }\n }\n if (finish_reason) {\n choice.finish_reason = finish_reason;\n if (__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\") && hasAutoParseableInput(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"))) {\n if (finish_reason === 'length') {\n throw new LengthFinishReasonError();\n }\n if (finish_reason === 'content_filter') {\n throw new ContentFilterFinishReasonError();\n }\n }\n }\n Object.assign(choice, other);\n if (!delta)\n continue; // Shouldn't happen; just in case.\n const { content, refusal, function_call, role, tool_calls, ...rest } = delta;\n assertIsEmpty(rest);\n Object.assign(choice.message, rest);\n if (refusal) {\n choice.message.refusal = (choice.message.refusal || '') + refusal;\n }\n if (role)\n choice.message.role = role;\n if (function_call) {\n if (!choice.message.function_call) {\n choice.message.function_call = function_call;\n }\n else {\n if (function_call.name)\n choice.message.function_call.name = function_call.name;\n if (function_call.arguments) {\n (_c = choice.message.function_call).arguments ?? (_c.arguments = '');\n choice.message.function_call.arguments += function_call.arguments;\n }\n }\n }\n if (content) {\n choice.message.content = (choice.message.content || '') + content;\n if (!choice.message.refusal && __classPrivateFieldGet(this, _ChatCompletionStream_instances, \"m\", _ChatCompletionStream_getAutoParseableResponseFormat).call(this)) {\n choice.message.parsed = partialParse(choice.message.content);\n }\n }\n if (tool_calls) {\n if (!choice.message.tool_calls)\n choice.message.tool_calls = [];\n for (const { index, id, type, function: fn, ...rest } of tool_calls) {\n const tool_call = ((_d = choice.message.tool_calls)[index] ?? (_d[index] = {}));\n Object.assign(tool_call, rest);\n if (id)\n tool_call.id = id;\n if (type)\n tool_call.type = type;\n if (fn)\n tool_call.function ?? (tool_call.function = { name: fn.name ?? '', arguments: '' });\n if (fn?.name)\n tool_call.function.name = fn.name;\n if (fn?.arguments) {\n tool_call.function.arguments += fn.arguments;\n if (shouldParseToolCall(__classPrivateFieldGet(this, _ChatCompletionStream_params, \"f\"), tool_call)) {\n tool_call.function.parsed_arguments = partialParse(tool_call.function.arguments);\n }\n }\n }\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('chunk', (chunk) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(chunk);\n }\n else {\n pushQueue.push(chunk);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n}\nfunction finalizeChatCompletion(snapshot, params) {\n const { id, choices, created, model, system_fingerprint, ...rest } = snapshot;\n const completion = {\n ...rest,\n id,\n choices: choices.map(({ message, finish_reason, index, logprobs, ...choiceRest }) => {\n if (!finish_reason) {\n throw new OpenAIError(`missing finish_reason for choice ${index}`);\n }\n const { content = null, function_call, tool_calls, ...messageRest } = message;\n const role = message.role; // this is what we expect; in theory it could be different which would make our types a slight lie but would be fine.\n if (!role) {\n throw new OpenAIError(`missing role for choice ${index}`);\n }\n if (function_call) {\n const { arguments: args, name } = function_call;\n if (args == null) {\n throw new OpenAIError(`missing function_call.arguments for choice ${index}`);\n }\n if (!name) {\n throw new OpenAIError(`missing function_call.name for choice ${index}`);\n }\n return {\n ...choiceRest,\n message: {\n content,\n function_call: { arguments: args, name },\n role,\n refusal: message.refusal ?? null,\n },\n finish_reason,\n index,\n logprobs,\n };\n }\n if (tool_calls) {\n return {\n ...choiceRest,\n index,\n finish_reason,\n logprobs,\n message: {\n ...messageRest,\n role,\n content,\n refusal: message.refusal ?? null,\n tool_calls: tool_calls.map((tool_call, i) => {\n const { function: fn, type, id, ...toolRest } = tool_call;\n const { arguments: args, name, ...fnRest } = fn || {};\n if (id == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].id\\n${str(snapshot)}`);\n }\n if (type == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].type\\n${str(snapshot)}`);\n }\n if (name == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.name\\n${str(snapshot)}`);\n }\n if (args == null) {\n throw new OpenAIError(`missing choices[${index}].tool_calls[${i}].function.arguments\\n${str(snapshot)}`);\n }\n return { ...toolRest, id, type, function: { ...fnRest, name, arguments: args } };\n }),\n },\n };\n }\n return {\n ...choiceRest,\n message: { ...messageRest, content, role, refusal: message.refusal ?? null },\n finish_reason,\n index,\n logprobs,\n };\n }),\n created,\n model,\n object: 'chat.completion',\n ...(system_fingerprint ? { system_fingerprint } : {}),\n };\n return maybeParseChatCompletion(completion, params);\n}\nfunction str(x) {\n return JSON.stringify(x);\n}\n/**\n * Ensures the given argument is an empty object, useful for\n * asserting that all known properties on an object have been\n * destructured.\n */\nfunction assertIsEmpty(obj) {\n return;\n}\nfunction assertNever(_x) { }\n//# sourceMappingURL=ChatCompletionStream.mjs.map","import { ChatCompletionStream } from \"./ChatCompletionStream.mjs\";\nexport class ChatCompletionStreamingRunner extends ChatCompletionStream {\n static fromReadableStream(stream) {\n const runner = new ChatCompletionStreamingRunner(null);\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n static runTools(client, params, options) {\n const runner = new ChatCompletionStreamingRunner(\n // @ts-expect-error TODO these types are incompatible\n params);\n const opts = {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'runTools' },\n };\n runner._run(() => runner._runTools(client, params, opts));\n return runner;\n }\n}\n//# sourceMappingURL=ChatCompletionStreamingRunner.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages } from \"./messages.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nimport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nimport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nimport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nimport { parseChatCompletion, validateInputTools } from \"../../../lib/parser.mjs\";\nexport class Completions extends APIResource {\n constructor() {\n super(...arguments);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n create(body, options) {\n return this._client.post('/chat/completions', { body, ...options, stream: body.stream ?? false });\n }\n /**\n * Get a stored chat completion. Only Chat Completions that have been created with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * const chatCompletion =\n * await client.chat.completions.retrieve('completion_id');\n * ```\n */\n retrieve(completionID, options) {\n return this._client.get(path `/chat/completions/${completionID}`, options);\n }\n /**\n * Modify a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be modified. Currently, the only\n * supported modification is to update the `metadata` field.\n *\n * @example\n * ```ts\n * const chatCompletion = await client.chat.completions.update(\n * 'completion_id',\n * { metadata: { foo: 'string' } },\n * );\n * ```\n */\n update(completionID, body, options) {\n return this._client.post(path `/chat/completions/${completionID}`, { body, ...options });\n }\n /**\n * List stored Chat Completions. Only Chat Completions that have been stored with\n * the `store` parameter set to `true` will be returned.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const chatCompletion of client.chat.completions.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/chat/completions', (CursorPage), { query, ...options });\n }\n /**\n * Delete a stored chat completion. Only Chat Completions that have been created\n * with the `store` parameter set to `true` can be deleted.\n *\n * @example\n * ```ts\n * const chatCompletionDeleted =\n * await client.chat.completions.delete('completion_id');\n * ```\n */\n delete(completionID, options) {\n return this._client.delete(path `/chat/completions/${completionID}`, options);\n }\n parse(body, options) {\n validateInputTools(body.tools);\n return this._client.chat.completions\n .create(body, {\n ...options,\n headers: {\n ...options?.headers,\n 'X-Stainless-Helper-Method': 'chat.completions.parse',\n },\n })\n ._thenUnwrap((completion) => parseChatCompletion(completion, body));\n }\n runTools(body, options) {\n if (body.stream) {\n return ChatCompletionStreamingRunner.runTools(this._client, body, options);\n }\n return ChatCompletionRunner.runTools(this._client, body, options);\n }\n /**\n * Creates a chat completion stream\n */\n stream(body, options) {\n return ChatCompletionStream.createChatCompletion(this._client, body, options);\n }\n}\nexport { ChatCompletionStreamingRunner } from \"../../../lib/ChatCompletionStreamingRunner.mjs\";\nexport { ParsingToolFunction, } from \"../../../lib/RunnableFunction.mjs\";\nexport { ChatCompletionStream } from \"../../../lib/ChatCompletionStream.mjs\";\nexport { ChatCompletionRunner } from \"../../../lib/ChatCompletionRunner.mjs\";\nCompletions.Messages = Messages;\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as CompletionsAPI from \"./completions/completions.mjs\";\nimport { Completions, } from \"./completions/completions.mjs\";\nexport class Chat extends APIResource {\n constructor() {\n super(...arguments);\n this.completions = new CompletionsAPI.Completions(this._client);\n }\n}\nChat.Completions = Completions;\n//# sourceMappingURL=chat.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { isReadonlyArray } from \"./utils/values.mjs\";\nconst brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders');\nfunction* iterateHeaders(headers) {\n if (!headers)\n return;\n if (brand_privateNullableHeaders in headers) {\n const { values, nulls } = headers;\n yield* values.entries();\n for (const name of nulls) {\n yield [name, null];\n }\n return;\n }\n let shouldClear = false;\n let iter;\n if (headers instanceof Headers) {\n iter = headers.entries();\n }\n else if (isReadonlyArray(headers)) {\n iter = headers;\n }\n else {\n shouldClear = true;\n iter = Object.entries(headers ?? {});\n }\n for (let row of iter) {\n const name = row[0];\n if (typeof name !== 'string')\n throw new TypeError('expected header name to be a string');\n const values = isReadonlyArray(row[1]) ? row[1] : [row[1]];\n let didClear = false;\n for (const value of values) {\n if (value === undefined)\n continue;\n // Objects keys always overwrite older headers, they never append.\n // Yield a null to clear the header before adding the new values.\n if (shouldClear && !didClear) {\n didClear = true;\n yield [name, null];\n }\n yield [name, value];\n }\n }\n}\nexport const buildHeaders = (newHeaders) => {\n const targetHeaders = new Headers();\n const nullHeaders = new Set();\n for (const headers of newHeaders) {\n const seenHeaders = new Set();\n for (const [name, value] of iterateHeaders(headers)) {\n const lowerName = name.toLowerCase();\n if (!seenHeaders.has(lowerName)) {\n targetHeaders.delete(name);\n seenHeaders.add(lowerName);\n }\n if (value === null) {\n targetHeaders.delete(name);\n nullHeaders.add(lowerName);\n }\n else {\n targetHeaders.append(name, value);\n nullHeaders.delete(lowerName);\n }\n }\n }\n return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders };\n};\nexport const isEmptyHeaders = (headers) => {\n for (const _ of iterateHeaders(headers))\n return false;\n return true;\n};\n//# sourceMappingURL=headers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nexport class Speech extends APIResource {\n /**\n * Generates audio from the input text.\n *\n * @example\n * ```ts\n * const speech = await client.audio.speech.create({\n * input: 'input',\n * model: 'string',\n * voice: 'ash',\n * });\n *\n * const content = await speech.blob();\n * console.log(content);\n * ```\n */\n create(body, options) {\n return this._client.post('/audio/speech', {\n body,\n ...options,\n headers: buildHeaders([{ Accept: 'application/octet-stream' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=speech.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Transcriptions extends APIResource {\n create(body, options) {\n return this._client.post('/audio/transcriptions', multipartFormRequestOptions({\n body,\n ...options,\n stream: body.stream ?? false,\n __metadata: { model: body.model },\n }, this._client));\n }\n}\n//# sourceMappingURL=transcriptions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nexport class Translations extends APIResource {\n create(body, options) {\n return this._client.post('/audio/translations', multipartFormRequestOptions({ body, ...options, __metadata: { model: body.model } }, this._client));\n }\n}\n//# sourceMappingURL=translations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as SpeechAPI from \"./speech.mjs\";\nimport { Speech } from \"./speech.mjs\";\nimport * as TranscriptionsAPI from \"./transcriptions.mjs\";\nimport { Transcriptions, } from \"./transcriptions.mjs\";\nimport * as TranslationsAPI from \"./translations.mjs\";\nimport { Translations, } from \"./translations.mjs\";\nexport class Audio extends APIResource {\n constructor() {\n super(...arguments);\n this.transcriptions = new TranscriptionsAPI.Transcriptions(this._client);\n this.translations = new TranslationsAPI.Translations(this._client);\n this.speech = new SpeechAPI.Speech(this._client);\n }\n}\nAudio.Transcriptions = Transcriptions;\nAudio.Translations = Translations;\nAudio.Speech = Speech;\n//# sourceMappingURL=audio.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Batches extends APIResource {\n /**\n * Creates and executes a batch from an uploaded file of requests\n */\n create(body, options) {\n return this._client.post('/batches', { body, ...options });\n }\n /**\n * Retrieves a batch.\n */\n retrieve(batchID, options) {\n return this._client.get(path `/batches/${batchID}`, options);\n }\n /**\n * List your organization's batches.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/batches', (CursorPage), { query, ...options });\n }\n /**\n * Cancels an in-progress batch. The batch will be in status `cancelling` for up to\n * 10 minutes, before changing to `cancelled`, where it will have partial results\n * (if any) available in the output file.\n */\n cancel(batchID, options) {\n return this._client.post(path `/batches/${batchID}/cancel`, options);\n }\n}\n//# sourceMappingURL=batches.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Assistants extends APIResource {\n /**\n * Create an assistant with a model and instructions.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.create({\n * model: 'gpt-4o',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/assistants', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.retrieve(\n * 'assistant_id',\n * );\n * ```\n */\n retrieve(assistantID, options) {\n return this._client.get(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies an assistant.\n *\n * @example\n * ```ts\n * const assistant = await client.beta.assistants.update(\n * 'assistant_id',\n * );\n * ```\n */\n update(assistantID, body, options) {\n return this._client.post(path `/assistants/${assistantID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of assistants.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const assistant of client.beta.assistants.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/assistants', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete an assistant.\n *\n * @example\n * ```ts\n * const assistantDeleted =\n * await client.beta.assistants.delete('assistant_id');\n * ```\n */\n delete(assistantID, options) {\n return this._client.delete(path `/assistants/${assistantID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=assistants.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class Sessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API. Can be configured with the same session parameters as the\n * `session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const session =\n * await client.beta.realtime.sessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nexport class TranscriptionSessions extends APIResource {\n /**\n * Create an ephemeral API token for use in client-side applications with the\n * Realtime API specifically for realtime transcriptions. Can be configured with\n * the same session parameters as the `transcription_session.update` client event.\n *\n * It responds with a session object, plus a `client_secret` key which contains a\n * usable ephemeral API token that can be used to authenticate browser clients for\n * the Realtime API.\n *\n * @example\n * ```ts\n * const transcriptionSession =\n * await client.beta.realtime.transcriptionSessions.create();\n * ```\n */\n create(body, options) {\n return this._client.post('/realtime/transcription_sessions', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=transcription-sessions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as SessionsAPI from \"./sessions.mjs\";\nimport { Sessions, } from \"./sessions.mjs\";\nimport * as TranscriptionSessionsAPI from \"./transcription-sessions.mjs\";\nimport { TranscriptionSessions, } from \"./transcription-sessions.mjs\";\n/**\n * @deprecated Realtime has now launched and is generally available. The old beta API is now deprecated.\n */\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.sessions = new SessionsAPI.Sessions(this._client);\n this.transcriptionSessions = new TranscriptionSessionsAPI.TranscriptionSessions(this._client);\n }\n}\nRealtime.Sessions = Sessions;\nRealtime.TranscriptionSessions = TranscriptionSessions;\n//# sourceMappingURL=realtime.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Messages extends APIResource {\n /**\n * Create a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}/messages`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieve a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(messageID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(messageID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/messages/${messageID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of messages for a given thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/messages`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Deletes a message.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(messageID, params, options) {\n const { thread_id } = params;\n return this._client.delete(path `/threads/${thread_id}/messages/${messageID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=messages.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Steps extends APIResource {\n /**\n * Retrieves a run step.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(stepID, params, options) {\n const { thread_id, run_id, ...query } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${run_id}/steps/${stepID}`, {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of run steps belonging to a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(runID, params, options) {\n const { thread_id, ...query } = params;\n return this._client.getAPIList(path `/threads/${thread_id}/runs/${runID}/steps`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\n//# sourceMappingURL=steps.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { OpenAIError } from \"../../core/error.mjs\";\nimport { encodeUTF8 } from \"./bytes.mjs\";\nexport const toBase64 = (data) => {\n if (!data)\n return '';\n if (typeof globalThis.Buffer !== 'undefined') {\n return globalThis.Buffer.from(data).toString('base64');\n }\n if (typeof data === 'string') {\n data = encodeUTF8(data);\n }\n if (typeof btoa !== 'undefined') {\n return btoa(String.fromCharCode.apply(null, data));\n }\n throw new OpenAIError('Cannot generate base64 string; Expected `Buffer` or `btoa` to be defined');\n};\nexport const fromBase64 = (str) => {\n if (typeof globalThis.Buffer !== 'undefined') {\n const buf = globalThis.Buffer.from(str, 'base64');\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n if (typeof atob !== 'undefined') {\n const bstr = atob(str);\n const buf = new Uint8Array(bstr.length);\n for (let i = 0; i < bstr.length; i++) {\n buf[i] = bstr.charCodeAt(i);\n }\n return buf;\n }\n throw new OpenAIError('Cannot decode base64 string; Expected `Buffer` or `atob` to be defined');\n};\n/**\n * Converts a Base64 encoded string to a Float32Array.\n * @param base64Str - The Base64 encoded string.\n * @returns An Array of numbers interpreted as Float32 values.\n */\nexport const toFloat32Array = (base64Str) => {\n if (typeof Buffer !== 'undefined') {\n // for Node.js environment\n const buf = Buffer.from(base64Str, 'base64');\n return Array.from(new Float32Array(buf.buffer, buf.byteOffset, buf.length / Float32Array.BYTES_PER_ELEMENT));\n }\n else {\n // for legacy web platform APIs\n const binaryStr = atob(base64Str);\n const len = binaryStr.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryStr.charCodeAt(i);\n }\n return Array.from(new Float32Array(bytes.buffer));\n }\n};\n//# sourceMappingURL=base64.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\n/**\n * Read an environment variable.\n *\n * Trims beginning and trailing whitespace.\n *\n * Will return undefined if the environment variable doesn't exist or cannot be accessed.\n */\nexport const readEnv = (env) => {\n if (typeof globalThis.process !== 'undefined') {\n return globalThis.process.env?.[env]?.trim() ?? undefined;\n }\n if (typeof globalThis.Deno !== 'undefined') {\n return globalThis.Deno.env?.get?.(env)?.trim();\n }\n return undefined;\n};\n//# sourceMappingURL=env.mjs.map","var _AssistantStream_instances, _a, _AssistantStream_events, _AssistantStream_runStepSnapshots, _AssistantStream_messageSnapshots, _AssistantStream_messageSnapshot, _AssistantStream_finalRun, _AssistantStream_currentContentIndex, _AssistantStream_currentContent, _AssistantStream_currentToolCallIndex, _AssistantStream_currentToolCall, _AssistantStream_currentEvent, _AssistantStream_currentRunSnapshot, _AssistantStream_currentRunStepSnapshot, _AssistantStream_addEvent, _AssistantStream_endRequest, _AssistantStream_handleMessage, _AssistantStream_handleRunStep, _AssistantStream_handleEvent, _AssistantStream_accumulateRunStep, _AssistantStream_accumulateMessage, _AssistantStream_accumulateContent, _AssistantStream_handleRun;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../internal/tslib.mjs\";\nimport { Stream } from \"../streaming.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../error.mjs\";\nimport { EventStream } from \"./EventStream.mjs\";\nimport { isObj } from \"../internal/utils.mjs\";\nexport class AssistantStream extends EventStream {\n constructor() {\n super(...arguments);\n _AssistantStream_instances.add(this);\n //Track all events in a single list for reference\n _AssistantStream_events.set(this, []);\n //Used to accumulate deltas\n //We are accumulating many types so the value here is not strict\n _AssistantStream_runStepSnapshots.set(this, {});\n _AssistantStream_messageSnapshots.set(this, {});\n _AssistantStream_messageSnapshot.set(this, void 0);\n _AssistantStream_finalRun.set(this, void 0);\n _AssistantStream_currentContentIndex.set(this, void 0);\n _AssistantStream_currentContent.set(this, void 0);\n _AssistantStream_currentToolCallIndex.set(this, void 0);\n _AssistantStream_currentToolCall.set(this, void 0);\n //For current snapshot methods\n _AssistantStream_currentEvent.set(this, void 0);\n _AssistantStream_currentRunSnapshot.set(this, void 0);\n _AssistantStream_currentRunStepSnapshot.set(this, void 0);\n }\n [(_AssistantStream_events = new WeakMap(), _AssistantStream_runStepSnapshots = new WeakMap(), _AssistantStream_messageSnapshots = new WeakMap(), _AssistantStream_messageSnapshot = new WeakMap(), _AssistantStream_finalRun = new WeakMap(), _AssistantStream_currentContentIndex = new WeakMap(), _AssistantStream_currentContent = new WeakMap(), _AssistantStream_currentToolCallIndex = new WeakMap(), _AssistantStream_currentToolCall = new WeakMap(), _AssistantStream_currentEvent = new WeakMap(), _AssistantStream_currentRunSnapshot = new WeakMap(), _AssistantStream_currentRunStepSnapshot = new WeakMap(), _AssistantStream_instances = new WeakSet(), Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n //Catch all for passing along all events\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((chunk) => (chunk ? { value: chunk, done: false } : { value: undefined, done: true }));\n }\n const chunk = pushQueue.shift();\n return { value: chunk, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n static fromReadableStream(stream) {\n const runner = new _a();\n runner._run(() => runner._fromReadableStream(stream));\n return runner;\n }\n async _fromReadableStream(readableStream, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n this._connected();\n const stream = Stream.fromReadableStream(readableStream, this.controller);\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n toReadableStream() {\n const stream = new Stream(this[Symbol.asyncIterator].bind(this), this.controller);\n return stream.toReadableStream();\n }\n static createToolAssistantStream(runId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runToolAssistantStream(runId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createToolAssistantStream(run, runId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.submitToolOutputs(runId, body, {\n ...options,\n signal: this.controller.signal,\n });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static createThreadAssistantStream(params, thread, options) {\n const runner = new _a();\n runner._run(() => runner._threadAssistantStream(params, thread, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n static createAssistantStream(threadId, runs, params, options) {\n const runner = new _a();\n runner._run(() => runner._runAssistantStream(threadId, runs, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n currentEvent() {\n return __classPrivateFieldGet(this, _AssistantStream_currentEvent, \"f\");\n }\n currentRun() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunSnapshot, \"f\");\n }\n currentMessageSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\");\n }\n currentRunStepSnapshot() {\n return __classPrivateFieldGet(this, _AssistantStream_currentRunStepSnapshot, \"f\");\n }\n async finalRunSteps() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\"));\n }\n async finalMessages() {\n await this.done();\n return Object.values(__classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\"));\n }\n async finalRun() {\n await this.done();\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run was not received.');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n }\n async _createThreadAssistantStream(thread, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await thread.createAndRun(body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n async _createAssistantStream(run, threadId, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n const body = { ...params, stream: true };\n const stream = await run.create(threadId, body, { ...options, signal: this.controller.signal });\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_addEvent).call(this, event);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return this._addRun(__classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_endRequest).call(this));\n }\n static accumulateDelta(acc, delta) {\n for (const [key, deltaValue] of Object.entries(delta)) {\n if (!acc.hasOwnProperty(key)) {\n acc[key] = deltaValue;\n continue;\n }\n let accValue = acc[key];\n if (accValue === null || accValue === undefined) {\n acc[key] = deltaValue;\n continue;\n }\n // We don't accumulate these special properties\n if (key === 'index' || key === 'type') {\n acc[key] = deltaValue;\n continue;\n }\n // Type-specific accumulation logic\n if (typeof accValue === 'string' && typeof deltaValue === 'string') {\n accValue += deltaValue;\n }\n else if (typeof accValue === 'number' && typeof deltaValue === 'number') {\n accValue += deltaValue;\n }\n else if (isObj(accValue) && isObj(deltaValue)) {\n accValue = this.accumulateDelta(accValue, deltaValue);\n }\n else if (Array.isArray(accValue) && Array.isArray(deltaValue)) {\n if (accValue.every((x) => typeof x === 'string' || typeof x === 'number')) {\n accValue.push(...deltaValue); // Use spread syntax for efficient addition\n continue;\n }\n for (const deltaEntry of deltaValue) {\n if (!isObj(deltaEntry)) {\n throw new Error(`Expected array delta entry to be an object but got: ${deltaEntry}`);\n }\n const index = deltaEntry['index'];\n if (index == null) {\n console.error(deltaEntry);\n throw new Error('Expected array delta entry to have an `index` property');\n }\n if (typeof index !== 'number') {\n throw new Error(`Expected array delta entry \\`index\\` property to be a number but got ${index}`);\n }\n const accEntry = accValue[index];\n if (accEntry == null) {\n accValue.push(deltaEntry);\n }\n else {\n accValue[index] = this.accumulateDelta(accEntry, deltaEntry);\n }\n }\n continue;\n }\n else {\n throw Error(`Unhandled record type: ${key}, deltaValue: ${deltaValue}, accValue: ${accValue}`);\n }\n acc[key] = accValue;\n }\n return acc;\n }\n _addRun(run) {\n return run;\n }\n async _threadAssistantStream(params, thread, options) {\n return await this._createThreadAssistantStream(thread, params, options);\n }\n async _runAssistantStream(threadId, runs, params, options) {\n return await this._createAssistantStream(runs, threadId, params, options);\n }\n async _runToolAssistantStream(runId, runs, params, options) {\n return await this._createToolAssistantStream(runs, runId, params, options);\n }\n}\n_a = AssistantStream, _AssistantStream_addEvent = function _AssistantStream_addEvent(event) {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _AssistantStream_currentEvent, event, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleEvent).call(this, event);\n switch (event.event) {\n case 'thread.created':\n //No action on this event.\n break;\n case 'thread.run.created':\n case 'thread.run.queued':\n case 'thread.run.in_progress':\n case 'thread.run.requires_action':\n case 'thread.run.completed':\n case 'thread.run.incomplete':\n case 'thread.run.failed':\n case 'thread.run.cancelling':\n case 'thread.run.cancelled':\n case 'thread.run.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRun).call(this, event);\n break;\n case 'thread.run.step.created':\n case 'thread.run.step.in_progress':\n case 'thread.run.step.delta':\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleRunStep).call(this, event);\n break;\n case 'thread.message.created':\n case 'thread.message.in_progress':\n case 'thread.message.delta':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_handleMessage).call(this, event);\n break;\n case 'error':\n //This is included for completeness, but errors are processed in the SSE event processing so this should not occur\n throw new Error('Encountered an error event in event processing - errors should be processed earlier');\n default:\n assertNever(event);\n }\n}, _AssistantStream_endRequest = function _AssistantStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n if (!__classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\"))\n throw Error('Final run has not been received');\n return __classPrivateFieldGet(this, _AssistantStream_finalRun, \"f\");\n}, _AssistantStream_handleMessage = function _AssistantStream_handleMessage(event) {\n const [accumulatedMessage, newContent] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateMessage).call(this, event, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, accumulatedMessage, \"f\");\n __classPrivateFieldGet(this, _AssistantStream_messageSnapshots, \"f\")[accumulatedMessage.id] = accumulatedMessage;\n for (const content of newContent) {\n const snapshotContent = accumulatedMessage.content[content.index];\n if (snapshotContent?.type == 'text') {\n this._emit('textCreated', snapshotContent.text);\n }\n }\n switch (event.event) {\n case 'thread.message.created':\n this._emit('messageCreated', event.data);\n break;\n case 'thread.message.in_progress':\n break;\n case 'thread.message.delta':\n this._emit('messageDelta', event.data.delta, accumulatedMessage);\n if (event.data.delta.content) {\n for (const content of event.data.delta.content) {\n //If it is text delta, emit a text delta event\n if (content.type == 'text' && content.text) {\n let textDelta = content.text;\n let snapshot = accumulatedMessage.content[content.index];\n if (snapshot && snapshot.type == 'text') {\n this._emit('textDelta', textDelta, snapshot.text);\n }\n else {\n throw Error('The snapshot associated with this text delta is not text or missing');\n }\n }\n if (content.index != __classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")) {\n //See if we have in progress content\n if (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\")) {\n switch (__classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").type) {\n case 'text':\n this._emit('textDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'image_file':\n this._emit('imageFileDone', __classPrivateFieldGet(this, _AssistantStream_currentContent, \"f\").image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContentIndex, content.index, \"f\");\n }\n __classPrivateFieldSet(this, _AssistantStream_currentContent, accumulatedMessage.content[content.index], \"f\");\n }\n }\n break;\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //We emit the latest content we were working on on completion (including incomplete)\n if (__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\") !== undefined) {\n const currentContent = event.data.content[__classPrivateFieldGet(this, _AssistantStream_currentContentIndex, \"f\")];\n if (currentContent) {\n switch (currentContent.type) {\n case 'image_file':\n this._emit('imageFileDone', currentContent.image_file, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n case 'text':\n this._emit('textDone', currentContent.text, __classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\"));\n break;\n }\n }\n }\n if (__classPrivateFieldGet(this, _AssistantStream_messageSnapshot, \"f\")) {\n this._emit('messageDone', event.data);\n }\n __classPrivateFieldSet(this, _AssistantStream_messageSnapshot, undefined, \"f\");\n }\n}, _AssistantStream_handleRunStep = function _AssistantStream_handleRunStep(event) {\n const accumulatedRunStep = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateRunStep).call(this, event);\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, accumulatedRunStep, \"f\");\n switch (event.event) {\n case 'thread.run.step.created':\n this._emit('runStepCreated', event.data);\n break;\n case 'thread.run.step.delta':\n const delta = event.data.delta;\n if (delta.step_details &&\n delta.step_details.type == 'tool_calls' &&\n delta.step_details.tool_calls &&\n accumulatedRunStep.step_details.type == 'tool_calls') {\n for (const toolCall of delta.step_details.tool_calls) {\n if (toolCall.index == __classPrivateFieldGet(this, _AssistantStream_currentToolCallIndex, \"f\")) {\n this._emit('toolCallDelta', toolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index]);\n }\n else {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n __classPrivateFieldSet(this, _AssistantStream_currentToolCallIndex, toolCall.index, \"f\");\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, accumulatedRunStep.step_details.tool_calls[toolCall.index], \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"))\n this._emit('toolCallCreated', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n }\n }\n }\n this._emit('runStepDelta', event.data.delta, accumulatedRunStep);\n break;\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n __classPrivateFieldSet(this, _AssistantStream_currentRunStepSnapshot, undefined, \"f\");\n const details = event.data.step_details;\n if (details.type == 'tool_calls') {\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n }\n this._emit('runStepDone', event.data, accumulatedRunStep);\n break;\n case 'thread.run.step.in_progress':\n break;\n }\n}, _AssistantStream_handleEvent = function _AssistantStream_handleEvent(event) {\n __classPrivateFieldGet(this, _AssistantStream_events, \"f\").push(event);\n this._emit('event', event);\n}, _AssistantStream_accumulateRunStep = function _AssistantStream_accumulateRunStep(event) {\n switch (event.event) {\n case 'thread.run.step.created':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n return event.data;\n case 'thread.run.step.delta':\n let snapshot = __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n if (!snapshot) {\n throw Error('Received a RunStepDelta before creation of a snapshot');\n }\n let data = event.data;\n if (data.delta) {\n const accumulated = _a.accumulateDelta(snapshot, data.delta);\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = accumulated;\n }\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n case 'thread.run.step.completed':\n case 'thread.run.step.failed':\n case 'thread.run.step.cancelled':\n case 'thread.run.step.expired':\n case 'thread.run.step.in_progress':\n __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id] = event.data;\n break;\n }\n if (__classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id])\n return __classPrivateFieldGet(this, _AssistantStream_runStepSnapshots, \"f\")[event.data.id];\n throw new Error('No snapshot available');\n}, _AssistantStream_accumulateMessage = function _AssistantStream_accumulateMessage(event, snapshot) {\n let newContent = [];\n switch (event.event) {\n case 'thread.message.created':\n //On creation the snapshot is just the initial message\n return [event.data, newContent];\n case 'thread.message.delta':\n if (!snapshot) {\n throw Error('Received a delta with no existing snapshot (there should be one from message creation)');\n }\n let data = event.data;\n //If this delta does not have content, nothing to process\n if (data.delta.content) {\n for (const contentElement of data.delta.content) {\n if (contentElement.index in snapshot.content) {\n let currentContent = snapshot.content[contentElement.index];\n snapshot.content[contentElement.index] = __classPrivateFieldGet(this, _AssistantStream_instances, \"m\", _AssistantStream_accumulateContent).call(this, contentElement, currentContent);\n }\n else {\n snapshot.content[contentElement.index] = contentElement;\n // This is a new element\n newContent.push(contentElement);\n }\n }\n }\n return [snapshot, newContent];\n case 'thread.message.in_progress':\n case 'thread.message.completed':\n case 'thread.message.incomplete':\n //No changes on other thread events\n if (snapshot) {\n return [snapshot, newContent];\n }\n else {\n throw Error('Received thread message event with no existing snapshot');\n }\n }\n throw Error('Tried to accumulate a non-message event');\n}, _AssistantStream_accumulateContent = function _AssistantStream_accumulateContent(contentElement, currentContent) {\n return _a.accumulateDelta(currentContent, contentElement);\n}, _AssistantStream_handleRun = function _AssistantStream_handleRun(event) {\n __classPrivateFieldSet(this, _AssistantStream_currentRunSnapshot, event.data, \"f\");\n switch (event.event) {\n case 'thread.run.created':\n break;\n case 'thread.run.queued':\n break;\n case 'thread.run.in_progress':\n break;\n case 'thread.run.requires_action':\n case 'thread.run.cancelled':\n case 'thread.run.failed':\n case 'thread.run.completed':\n case 'thread.run.expired':\n case 'thread.run.incomplete':\n __classPrivateFieldSet(this, _AssistantStream_finalRun, event.data, \"f\");\n if (__classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\")) {\n this._emit('toolCallDone', __classPrivateFieldGet(this, _AssistantStream_currentToolCall, \"f\"));\n __classPrivateFieldSet(this, _AssistantStream_currentToolCall, undefined, \"f\");\n }\n break;\n case 'thread.run.cancelling':\n break;\n }\n};\nfunction assertNever(_x) { }\n//# sourceMappingURL=AssistantStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../../core/resource.mjs\";\nimport * as StepsAPI from \"./steps.mjs\";\nimport { Steps, } from \"./steps.mjs\";\nimport { CursorPage } from \"../../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../../lib/AssistantStream.mjs\";\nimport { sleep } from \"../../../../internal/utils/sleep.mjs\";\nimport { path } from \"../../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.steps = new StepsAPI.Steps(this._client);\n }\n create(threadID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/threads/${threadID}/runs`, {\n query: { include },\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * Retrieves a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(runID, params, options) {\n const { thread_id } = params;\n return this._client.get(path `/threads/${thread_id}/runs/${runID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a run.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of runs belonging to a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n list(threadID, query = {}, options) {\n return this._client.getAPIList(path `/threads/${threadID}/runs`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancels a run that is `in_progress`.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n cancel(runID, params, options) {\n const { thread_id } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * A helper to create a run an poll for a terminal state. More information on Run\n * lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndPoll(threadId, body, options) {\n const run = await this.create(threadId, body, options);\n return await this.poll(run.id, { thread_id: threadId }, options);\n }\n /**\n * Create a Run stream\n *\n * @deprecated use `stream` instead\n */\n createAndStream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n /**\n * A helper to poll a run status until it reaches a terminal state. More\n * information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async poll(runId, params, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: run, response } = await this.retrieve(runId, params, {\n ...options,\n headers: { ...options?.headers, ...headers },\n }).withResponse();\n switch (run.status) {\n //If we are in any sort of intermediate state we poll\n case 'queued':\n case 'in_progress':\n case 'cancelling':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n //We return the run in any terminal state.\n case 'requires_action':\n case 'incomplete':\n case 'cancelled':\n case 'completed':\n case 'failed':\n case 'expired':\n return run;\n }\n }\n }\n /**\n * Create a Run stream\n */\n stream(threadId, body, options) {\n return AssistantStream.createAssistantStream(threadId, this._client.beta.threads.runs, body, options);\n }\n submitToolOutputs(runID, params, options) {\n const { thread_id, ...body } = params;\n return this._client.post(path `/threads/${thread_id}/runs/${runID}/submit_tool_outputs`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: params.stream ?? false,\n });\n }\n /**\n * A helper to submit a tool output to a run and poll for a terminal run state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async submitToolOutputsAndPoll(runId, params, options) {\n const run = await this.submitToolOutputs(runId, params, options);\n return await this.poll(run.id, params, options);\n }\n /**\n * Submit the tool outputs from a previous run and stream the run to a terminal\n * state. More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n submitToolOutputsStream(runId, params, options) {\n return AssistantStream.createToolAssistantStream(runId, this._client.beta.threads.runs, params, options);\n }\n}\nRuns.Steps = Steps;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as MessagesAPI from \"./messages.mjs\";\nimport { Messages, } from \"./messages.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { AssistantStream } from \"../../../lib/AssistantStream.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\n/**\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\nexport class Threads extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n this.messages = new MessagesAPI.Messages(this._client);\n }\n /**\n * Create a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n create(body = {}, options) {\n return this._client.post('/threads', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n retrieve(threadID, options) {\n return this._client.get(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n update(threadID, body, options) {\n return this._client.post(path `/threads/${threadID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a thread.\n *\n * @deprecated The Assistants API is deprecated in favor of the Responses API\n */\n delete(threadID, options) {\n return this._client.delete(path `/threads/${threadID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n createAndRun(body, options) {\n return this._client.post('/threads/runs', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n stream: body.stream ?? false,\n });\n }\n /**\n * A helper to create a thread, start a run and then poll for a terminal state.\n * More information on Run lifecycles can be found here:\n * https://platform.openai.com/docs/assistants/how-it-works/runs-and-run-steps\n */\n async createAndRunPoll(body, options) {\n const run = await this.createAndRun(body, options);\n return await this.runs.poll(run.id, { thread_id: run.thread_id }, options);\n }\n /**\n * Create a thread and stream the run back\n */\n createAndRunStream(body, options) {\n return AssistantStream.createThreadAssistantStream(body, this._client.beta.threads, options);\n }\n}\nThreads.Runs = Runs;\nThreads.Messages = Messages;\n//# sourceMappingURL=threads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as AssistantsAPI from \"./assistants.mjs\";\nimport { Assistants, } from \"./assistants.mjs\";\nimport * as RealtimeAPI from \"./realtime/realtime.mjs\";\nimport { Realtime, } from \"./realtime/realtime.mjs\";\nimport * as ThreadsAPI from \"./threads/threads.mjs\";\nimport { Threads, } from \"./threads/threads.mjs\";\nexport class Beta extends APIResource {\n constructor() {\n super(...arguments);\n this.realtime = new RealtimeAPI.Realtime(this._client);\n this.assistants = new AssistantsAPI.Assistants(this._client);\n this.threads = new ThreadsAPI.Threads(this._client);\n }\n}\nBeta.Realtime = Realtime;\nBeta.Assistants = Assistants;\nBeta.Threads = Threads;\n//# sourceMappingURL=beta.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Completions extends APIResource {\n create(body, options) {\n return this._client.post('/completions', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=completions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Content extends APIResource {\n /**\n * Retrieve Container File Content\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n}\n//# sourceMappingURL=content.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as ContentAPI from \"./content.mjs\";\nimport { Content } from \"./content.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../../internal/headers.mjs\";\nimport { multipartFormRequestOptions } from \"../../../internal/uploads.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n constructor() {\n super(...arguments);\n this.content = new ContentAPI.Content(this._client);\n }\n /**\n * Create a Container File\n *\n * You can send either a multipart/form-data request with the raw file content, or\n * a JSON request with a file ID.\n */\n create(containerID, body, options) {\n return this._client.post(path `/containers/${containerID}/files`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Retrieve Container File\n */\n retrieve(fileID, params, options) {\n const { container_id } = params;\n return this._client.get(path `/containers/${container_id}/files/${fileID}`, options);\n }\n /**\n * List Container files\n */\n list(containerID, query = {}, options) {\n return this._client.getAPIList(path `/containers/${containerID}/files`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete Container File\n */\n delete(fileID, params, options) {\n const { container_id } = params;\n return this._client.delete(path `/containers/${container_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nFiles.Content = Content;\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FilesAPI from \"./files/files.mjs\";\nimport { Files, } from \"./files/files.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Containers extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n }\n /**\n * Create Container\n */\n create(body, options) {\n return this._client.post('/containers', { body, ...options });\n }\n /**\n * Retrieve Container\n */\n retrieve(containerID, options) {\n return this._client.get(path `/containers/${containerID}`, options);\n }\n /**\n * List Containers\n */\n list(query = {}, options) {\n return this._client.getAPIList('/containers', (CursorPage), { query, ...options });\n }\n /**\n * Delete Container\n */\n delete(containerID, options) {\n return this._client.delete(path `/containers/${containerID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n}\nContainers.Files = Files;\n//# sourceMappingURL=containers.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { ConversationCursorPage, } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Items extends APIResource {\n /**\n * Create items in a conversation with the given ID.\n */\n create(conversationID, params, options) {\n const { include, ...body } = params;\n return this._client.post(path `/conversations/${conversationID}/items`, {\n query: { include },\n body,\n ...options,\n });\n }\n /**\n * Get a single item from a conversation with the given IDs.\n */\n retrieve(itemID, params, options) {\n const { conversation_id, ...query } = params;\n return this._client.get(path `/conversations/${conversation_id}/items/${itemID}`, { query, ...options });\n }\n /**\n * List all items for a conversation with the given ID.\n */\n list(conversationID, query = {}, options) {\n return this._client.getAPIList(path `/conversations/${conversationID}/items`, (ConversationCursorPage), { query, ...options });\n }\n /**\n * Delete an item from a conversation with the given IDs.\n */\n delete(itemID, params, options) {\n const { conversation_id } = params;\n return this._client.delete(path `/conversations/${conversation_id}/items/${itemID}`, options);\n }\n}\n//# sourceMappingURL=items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ItemsAPI from \"./items.mjs\";\nimport { Items, } from \"./items.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Conversations extends APIResource {\n constructor() {\n super(...arguments);\n this.items = new ItemsAPI.Items(this._client);\n }\n /**\n * Create a conversation.\n */\n create(body = {}, options) {\n return this._client.post('/conversations', { body, ...options });\n }\n /**\n * Get a conversation\n */\n retrieve(conversationID, options) {\n return this._client.get(path `/conversations/${conversationID}`, options);\n }\n /**\n * Update a conversation\n */\n update(conversationID, body, options) {\n return this._client.post(path `/conversations/${conversationID}`, { body, ...options });\n }\n /**\n * Delete a conversation. Items in the conversation will not be deleted.\n */\n delete(conversationID, options) {\n return this._client.delete(path `/conversations/${conversationID}`, options);\n }\n}\nConversations.Items = Items;\n//# sourceMappingURL=conversations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { loggerFor, toFloat32Array } from \"../internal/utils.mjs\";\nexport class Embeddings extends APIResource {\n /**\n * Creates an embedding vector representing the input text.\n *\n * @example\n * ```ts\n * const createEmbeddingResponse =\n * await client.embeddings.create({\n * input: 'The quick brown fox jumped over the lazy dog',\n * model: 'text-embedding-3-small',\n * });\n * ```\n */\n create(body, options) {\n const hasUserProvidedEncodingFormat = !!body.encoding_format;\n // No encoding_format specified, defaulting to base64 for performance reasons\n // See https://github.com/openai/openai-node/pull/1312\n let encoding_format = hasUserProvidedEncodingFormat ? body.encoding_format : 'base64';\n if (hasUserProvidedEncodingFormat) {\n loggerFor(this._client).debug('embeddings/user defined encoding_format:', body.encoding_format);\n }\n const response = this._client.post('/embeddings', {\n body: {\n ...body,\n encoding_format: encoding_format,\n },\n ...options,\n });\n // if the user specified an encoding_format, return the response as-is\n if (hasUserProvidedEncodingFormat) {\n return response;\n }\n // in this stage, we are sure the user did not specify an encoding_format\n // and we defaulted to base64 for performance reasons\n // we are sure then that the response is base64 encoded, let's decode it\n // the returned result will be a float32 array since this is OpenAI API's default encoding\n loggerFor(this._client).debug('embeddings/decoding base64 embeddings from base64');\n return response._thenUnwrap((response) => {\n if (response && response.data) {\n response.data.forEach((embeddingBase64Obj) => {\n const embeddingBase64Str = embeddingBase64Obj.embedding;\n embeddingBase64Obj.embedding = toFloat32Array(embeddingBase64Str);\n });\n }\n return response;\n });\n }\n}\n//# sourceMappingURL=embeddings.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class OutputItems extends APIResource {\n /**\n * Get an evaluation run output item by ID.\n */\n retrieve(outputItemID, params, options) {\n const { eval_id, run_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${run_id}/output_items/${outputItemID}`, options);\n }\n /**\n * Get a list of output items for an evaluation run.\n */\n list(runID, params, options) {\n const { eval_id, ...query } = params;\n return this._client.getAPIList(path `/evals/${eval_id}/runs/${runID}/output_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=output-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as OutputItemsAPI from \"./output-items.mjs\";\nimport { OutputItems, } from \"./output-items.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Runs extends APIResource {\n constructor() {\n super(...arguments);\n this.outputItems = new OutputItemsAPI.OutputItems(this._client);\n }\n /**\n * Kicks off a new run for a given evaluation, specifying the data source, and what\n * model configuration to use to test. The datasource will be validated against the\n * schema specified in the config of the evaluation.\n */\n create(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}/runs`, { body, ...options });\n }\n /**\n * Get an evaluation run by ID.\n */\n retrieve(runID, params, options) {\n const { eval_id } = params;\n return this._client.get(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Get a list of runs for an evaluation.\n */\n list(evalID, query = {}, options) {\n return this._client.getAPIList(path `/evals/${evalID}/runs`, (CursorPage), {\n query,\n ...options,\n });\n }\n /**\n * Delete an eval run.\n */\n delete(runID, params, options) {\n const { eval_id } = params;\n return this._client.delete(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n /**\n * Cancel an ongoing evaluation run.\n */\n cancel(runID, params, options) {\n const { eval_id } = params;\n return this._client.post(path `/evals/${eval_id}/runs/${runID}`, options);\n }\n}\nRuns.OutputItems = OutputItems;\n//# sourceMappingURL=runs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as RunsAPI from \"./runs/runs.mjs\";\nimport { Runs, } from \"./runs/runs.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Evals extends APIResource {\n constructor() {\n super(...arguments);\n this.runs = new RunsAPI.Runs(this._client);\n }\n /**\n * Create the structure of an evaluation that can be used to test a model's\n * performance. An evaluation is a set of testing criteria and the config for a\n * data source, which dictates the schema of the data used in the evaluation. After\n * creating an evaluation, you can run it on different models and model parameters.\n * We support several types of graders and datasources. For more information, see\n * the [Evals guide](https://platform.openai.com/docs/guides/evals).\n */\n create(body, options) {\n return this._client.post('/evals', { body, ...options });\n }\n /**\n * Get an evaluation by ID.\n */\n retrieve(evalID, options) {\n return this._client.get(path `/evals/${evalID}`, options);\n }\n /**\n * Update certain properties of an evaluation.\n */\n update(evalID, body, options) {\n return this._client.post(path `/evals/${evalID}`, { body, ...options });\n }\n /**\n * List evaluations for a project.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/evals', (CursorPage), { query, ...options });\n }\n /**\n * Delete an evaluation.\n */\n delete(evalID, options) {\n return this._client.delete(path `/evals/${evalID}`, options);\n }\n}\nEvals.Runs = Runs;\n//# sourceMappingURL=evals.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { CursorPage } from \"../core/pagination.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nimport { sleep } from \"../internal/utils/sleep.mjs\";\nimport { APIConnectionTimeoutError } from \"../error.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Upload a file that can be used across various endpoints. Individual files can be\n * up to 512 MB, and the size of all files uploaded by one organization can be up\n * to 1 TB.\n *\n * The Assistants API supports files up to 2 million tokens and of specific file\n * types. See the\n * [Assistants Tools guide](https://platform.openai.com/docs/assistants/tools) for\n * details.\n *\n * The Fine-tuning API only supports `.jsonl` files. The input also has certain\n * required formats for fine-tuning\n * [chat](https://platform.openai.com/docs/api-reference/fine-tuning/chat-input) or\n * [completions](https://platform.openai.com/docs/api-reference/fine-tuning/completions-input)\n * models.\n *\n * The Batch API only supports `.jsonl` files up to 200 MB in size. The input also\n * has a specific required\n * [format](https://platform.openai.com/docs/api-reference/batch/request-input).\n *\n * Please [contact us](https://help.openai.com/) if you need to increase these\n * storage limits.\n */\n create(body, options) {\n return this._client.post('/files', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n /**\n * Returns information about a specific file.\n */\n retrieve(fileID, options) {\n return this._client.get(path `/files/${fileID}`, options);\n }\n /**\n * Returns a list of files.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/files', (CursorPage), { query, ...options });\n }\n /**\n * Delete a file.\n */\n delete(fileID, options) {\n return this._client.delete(path `/files/${fileID}`, options);\n }\n /**\n * Returns the contents of the specified file.\n */\n content(fileID, options) {\n return this._client.get(path `/files/${fileID}/content`, {\n ...options,\n headers: buildHeaders([{ Accept: 'application/binary' }, options?.headers]),\n __binaryResponse: true,\n });\n }\n /**\n * Waits for the given file to be processed, default timeout is 30 mins.\n */\n async waitForProcessing(id, { pollInterval = 5000, maxWait = 30 * 60 * 1000 } = {}) {\n const TERMINAL_STATES = new Set(['processed', 'error', 'deleted']);\n const start = Date.now();\n let file = await this.retrieve(id);\n while (!file.status || !TERMINAL_STATES.has(file.status)) {\n await sleep(pollInterval);\n file = await this.retrieve(id);\n if (Date.now() - start > maxWait) {\n throw new APIConnectionTimeoutError({\n message: `Giving up on waiting for file ${id} to finish processing after ${maxWait} milliseconds.`,\n });\n }\n }\n return file;\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class Methods extends APIResource {\n}\n//# sourceMappingURL=methods.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nexport class Graders extends APIResource {\n /**\n * Run a grader.\n *\n * @example\n * ```ts\n * const response = await client.fineTuning.alpha.graders.run({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * model_sample: 'model_sample',\n * });\n * ```\n */\n run(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/run', { body, ...options });\n }\n /**\n * Validate a grader.\n *\n * @example\n * ```ts\n * const response =\n * await client.fineTuning.alpha.graders.validate({\n * grader: {\n * input: 'input',\n * name: 'name',\n * operation: 'eq',\n * reference: 'reference',\n * type: 'string_check',\n * },\n * });\n * ```\n */\n validate(body, options) {\n return this._client.post('/fine_tuning/alpha/graders/validate', { body, ...options });\n }\n}\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as GradersAPI from \"./graders.mjs\";\nimport { Graders, } from \"./graders.mjs\";\nexport class Alpha extends APIResource {\n constructor() {\n super(...arguments);\n this.graders = new GradersAPI.Graders(this._client);\n }\n}\nAlpha.Graders = Graders;\n//# sourceMappingURL=alpha.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { Page } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Permissions extends APIResource {\n /**\n * **NOTE:** Calling this endpoint requires an [admin API key](../admin-api-keys).\n *\n * This enables organization owners to share fine-tuned models with other projects\n * in their organization.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const permissionCreateResponse of client.fineTuning.checkpoints.permissions.create(\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * { project_ids: ['string'] },\n * )) {\n * // ...\n * }\n * ```\n */\n create(fineTunedModelCheckpoint, body, options) {\n return this._client.getAPIList(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, (Page), { body, method: 'post', ...options });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to view all permissions for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTunedModelCheckpoint, query = {}, options) {\n return this._client.get(path `/fine_tuning/checkpoints/${fineTunedModelCheckpoint}/permissions`, {\n query,\n ...options,\n });\n }\n /**\n * **NOTE:** This endpoint requires an [admin API key](../admin-api-keys).\n *\n * Organization owners can use this endpoint to delete a permission for a\n * fine-tuned model checkpoint.\n *\n * @example\n * ```ts\n * const permission =\n * await client.fineTuning.checkpoints.permissions.delete(\n * 'cp_zc4Q7MP6XxulcVzj4MZdwsAB',\n * {\n * fine_tuned_model_checkpoint:\n * 'ft:gpt-4o-mini-2024-07-18:org:weather:B7R9VjQd',\n * },\n * );\n * ```\n */\n delete(permissionID, params, options) {\n const { fine_tuned_model_checkpoint } = params;\n return this._client.delete(path `/fine_tuning/checkpoints/${fine_tuned_model_checkpoint}/permissions/${permissionID}`, options);\n }\n}\n//# sourceMappingURL=permissions.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as PermissionsAPI from \"./permissions.mjs\";\nimport { Permissions, } from \"./permissions.mjs\";\nexport class Checkpoints extends APIResource {\n constructor() {\n super(...arguments);\n this.permissions = new PermissionsAPI.Permissions(this._client);\n }\n}\nCheckpoints.Permissions = Permissions;\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Checkpoints extends APIResource {\n /**\n * List checkpoints for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobCheckpoint of client.fineTuning.jobs.checkpoints.list(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n list(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/checkpoints`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=checkpoints.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../../core/resource.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints.mjs\";\nimport { Checkpoints, } from \"./checkpoints.mjs\";\nimport { CursorPage } from \"../../../core/pagination.mjs\";\nimport { path } from \"../../../internal/utils/path.mjs\";\nexport class Jobs extends APIResource {\n constructor() {\n super(...arguments);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n }\n /**\n * Creates a fine-tuning job which begins the process of creating a new model from\n * a given dataset.\n *\n * Response includes details of the enqueued job including job status and the name\n * of the fine-tuned models once complete.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.create({\n * model: 'gpt-4o-mini',\n * training_file: 'file-abc123',\n * });\n * ```\n */\n create(body, options) {\n return this._client.post('/fine_tuning/jobs', { body, ...options });\n }\n /**\n * Get info about a fine-tuning job.\n *\n * [Learn more about fine-tuning](https://platform.openai.com/docs/guides/model-optimization)\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.retrieve(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n retrieve(fineTuningJobID, options) {\n return this._client.get(path `/fine_tuning/jobs/${fineTuningJobID}`, options);\n }\n /**\n * List your organization's fine-tuning jobs\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJob of client.fineTuning.jobs.list()) {\n * // ...\n * }\n * ```\n */\n list(query = {}, options) {\n return this._client.getAPIList('/fine_tuning/jobs', (CursorPage), { query, ...options });\n }\n /**\n * Immediately cancel a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.cancel(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n cancel(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/cancel`, options);\n }\n /**\n * Get status updates for a fine-tuning job.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const fineTuningJobEvent of client.fineTuning.jobs.listEvents(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * )) {\n * // ...\n * }\n * ```\n */\n listEvents(fineTuningJobID, query = {}, options) {\n return this._client.getAPIList(path `/fine_tuning/jobs/${fineTuningJobID}/events`, (CursorPage), { query, ...options });\n }\n /**\n * Pause a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.pause(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n pause(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/pause`, options);\n }\n /**\n * Resume a fine-tune job.\n *\n * @example\n * ```ts\n * const fineTuningJob = await client.fineTuning.jobs.resume(\n * 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',\n * );\n * ```\n */\n resume(fineTuningJobID, options) {\n return this._client.post(path `/fine_tuning/jobs/${fineTuningJobID}/resume`, options);\n }\n}\nJobs.Checkpoints = Checkpoints;\n//# sourceMappingURL=jobs.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as MethodsAPI from \"./methods.mjs\";\nimport { Methods, } from \"./methods.mjs\";\nimport * as AlphaAPI from \"./alpha/alpha.mjs\";\nimport { Alpha } from \"./alpha/alpha.mjs\";\nimport * as CheckpointsAPI from \"./checkpoints/checkpoints.mjs\";\nimport { Checkpoints } from \"./checkpoints/checkpoints.mjs\";\nimport * as JobsAPI from \"./jobs/jobs.mjs\";\nimport { Jobs, } from \"./jobs/jobs.mjs\";\nexport class FineTuning extends APIResource {\n constructor() {\n super(...arguments);\n this.methods = new MethodsAPI.Methods(this._client);\n this.jobs = new JobsAPI.Jobs(this._client);\n this.checkpoints = new CheckpointsAPI.Checkpoints(this._client);\n this.alpha = new AlphaAPI.Alpha(this._client);\n }\n}\nFineTuning.Methods = Methods;\nFineTuning.Jobs = Jobs;\nFineTuning.Checkpoints = Checkpoints;\nFineTuning.Alpha = Alpha;\n//# sourceMappingURL=fine-tuning.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class GraderModels extends APIResource {\n}\n//# sourceMappingURL=grader-models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as GraderModelsAPI from \"./grader-models.mjs\";\nimport { GraderModels, } from \"./grader-models.mjs\";\nexport class Graders extends APIResource {\n constructor() {\n super(...arguments);\n this.graderModels = new GraderModelsAPI.GraderModels(this._client);\n }\n}\nGraders.GraderModels = GraderModels;\n//# sourceMappingURL=graders.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../internal/uploads.mjs\";\nexport class Images extends APIResource {\n /**\n * Creates a variation of a given image. This endpoint only supports `dall-e-2`.\n *\n * @example\n * ```ts\n * const imagesResponse = await client.images.createVariation({\n * image: fs.createReadStream('otter.png'),\n * });\n * ```\n */\n createVariation(body, options) {\n return this._client.post('/images/variations', multipartFormRequestOptions({ body, ...options }, this._client));\n }\n edit(body, options) {\n return this._client.post('/images/edits', multipartFormRequestOptions({ body, ...options, stream: body.stream ?? false }, this._client));\n }\n generate(body, options) {\n return this._client.post('/images/generations', { body, ...options, stream: body.stream ?? false });\n }\n}\n//# sourceMappingURL=images.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nimport { Page } from \"../core/pagination.mjs\";\nimport { path } from \"../internal/utils/path.mjs\";\nexport class Models extends APIResource {\n /**\n * Retrieves a model instance, providing basic information about the model such as\n * the owner and permissioning.\n */\n retrieve(model, options) {\n return this._client.get(path `/models/${model}`, options);\n }\n /**\n * Lists the currently available models, and provides basic information about each\n * one such as the owner and availability.\n */\n list(options) {\n return this._client.getAPIList('/models', (Page), options);\n }\n /**\n * Delete a fine-tuned model. You must have the Owner role in your organization to\n * delete a model.\n */\n delete(model, options) {\n return this._client.delete(path `/models/${model}`, options);\n }\n}\n//# sourceMappingURL=models.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../core/resource.mjs\";\nexport class Moderations extends APIResource {\n /**\n * Classifies if text and/or image inputs are potentially harmful. Learn more in\n * the [moderation guide](https://platform.openai.com/docs/guides/moderation).\n */\n create(body, options) {\n return this._client.post('/moderations', { body, ...options });\n }\n}\n//# sourceMappingURL=moderations.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nexport class ClientSecrets extends APIResource {\n /**\n * Create a Realtime client secret with an associated session configuration.\n */\n create(body, options) {\n return this._client.post('/realtime/client_secrets', { body, ...options });\n }\n}\n//# sourceMappingURL=client-secrets.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as ClientSecretsAPI from \"./client-secrets.mjs\";\nimport { ClientSecrets, } from \"./client-secrets.mjs\";\nexport class Realtime extends APIResource {\n constructor() {\n super(...arguments);\n this.clientSecrets = new ClientSecretsAPI.ClientSecrets(this._client);\n }\n}\nRealtime.ClientSecrets = ClientSecrets;\n//# sourceMappingURL=realtime.mjs.map","import { OpenAIError } from \"../error.mjs\";\nimport { isAutoParsableResponseFormat } from \"../lib/parser.mjs\";\nexport function maybeParseResponse(response, params) {\n if (!params || !hasAutoParseableInput(params)) {\n return {\n ...response,\n output_parsed: null,\n output: response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: null,\n };\n }\n if (item.type === 'message') {\n return {\n ...item,\n content: item.content.map((content) => ({\n ...content,\n parsed: null,\n })),\n };\n }\n else {\n return item;\n }\n }),\n };\n }\n return parseResponse(response, params);\n}\nexport function parseResponse(response, params) {\n const output = response.output.map((item) => {\n if (item.type === 'function_call') {\n return {\n ...item,\n parsed_arguments: parseToolCall(params, item),\n };\n }\n if (item.type === 'message') {\n const content = item.content.map((content) => {\n if (content.type === 'output_text') {\n return {\n ...content,\n parsed: parseTextFormat(params, content.text),\n };\n }\n return content;\n });\n return {\n ...item,\n content,\n };\n }\n return item;\n });\n const parsed = Object.assign({}, response, { output });\n if (!Object.getOwnPropertyDescriptor(response, 'output_text')) {\n addOutputText(parsed);\n }\n Object.defineProperty(parsed, 'output_parsed', {\n enumerable: true,\n get() {\n for (const output of parsed.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text' && content.parsed !== null) {\n return content.parsed;\n }\n }\n }\n return null;\n },\n });\n return parsed;\n}\nfunction parseTextFormat(params, content) {\n if (params.text?.format?.type !== 'json_schema') {\n return null;\n }\n if ('$parseRaw' in params.text?.format) {\n const text_format = params.text?.format;\n return text_format.$parseRaw(content);\n }\n return JSON.parse(content);\n}\nexport function hasAutoParseableInput(params) {\n if (isAutoParsableResponseFormat(params.text?.format)) {\n return true;\n }\n return false;\n}\nexport function makeParseableResponseTool(tool, { parser, callback, }) {\n const obj = { ...tool };\n Object.defineProperties(obj, {\n $brand: {\n value: 'auto-parseable-tool',\n enumerable: false,\n },\n $parseRaw: {\n value: parser,\n enumerable: false,\n },\n $callback: {\n value: callback,\n enumerable: false,\n },\n });\n return obj;\n}\nexport function isAutoParsableTool(tool) {\n return tool?.['$brand'] === 'auto-parseable-tool';\n}\nfunction getInputToolByName(input_tools, name) {\n return input_tools.find((tool) => tool.type === 'function' && tool.name === name);\n}\nfunction parseToolCall(params, toolCall) {\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return {\n ...toolCall,\n ...toolCall,\n parsed_arguments: isAutoParsableTool(inputTool) ? inputTool.$parseRaw(toolCall.arguments)\n : inputTool?.strict ? JSON.parse(toolCall.arguments)\n : null,\n };\n}\nexport function shouldParseToolCall(params, toolCall) {\n if (!params) {\n return false;\n }\n const inputTool = getInputToolByName(params.tools ?? [], toolCall.name);\n return isAutoParsableTool(inputTool) || inputTool?.strict || false;\n}\nexport function validateInputTools(tools) {\n for (const tool of tools ?? []) {\n if (tool.type !== 'function') {\n throw new OpenAIError(`Currently only \\`function\\` tool types support auto-parsing; Received \\`${tool.type}\\``);\n }\n if (tool.function.strict !== true) {\n throw new OpenAIError(`The \\`${tool.function.name}\\` tool is not marked with \\`strict: true\\`. Only strict function tools can be auto-parsed`);\n }\n }\n}\nexport function addOutputText(rsp) {\n const texts = [];\n for (const output of rsp.output) {\n if (output.type !== 'message') {\n continue;\n }\n for (const content of output.content) {\n if (content.type === 'output_text') {\n texts.push(content.text);\n }\n }\n }\n rsp.output_text = texts.join('');\n}\n//# sourceMappingURL=ResponsesParser.mjs.map","var _ResponseStream_instances, _ResponseStream_params, _ResponseStream_currentResponseSnapshot, _ResponseStream_finalResponse, _ResponseStream_beginRequest, _ResponseStream_addEvent, _ResponseStream_endRequest, _ResponseStream_accumulateResponse;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"../../internal/tslib.mjs\";\nimport { APIUserAbortError, OpenAIError } from \"../../error.mjs\";\nimport { EventStream } from \"../EventStream.mjs\";\nimport { maybeParseResponse } from \"../ResponsesParser.mjs\";\nexport class ResponseStream extends EventStream {\n constructor(params) {\n super();\n _ResponseStream_instances.add(this);\n _ResponseStream_params.set(this, void 0);\n _ResponseStream_currentResponseSnapshot.set(this, void 0);\n _ResponseStream_finalResponse.set(this, void 0);\n __classPrivateFieldSet(this, _ResponseStream_params, params, \"f\");\n }\n static createResponse(client, params, options) {\n const runner = new ResponseStream(params);\n runner._run(() => runner._createOrRetrieveResponse(client, params, {\n ...options,\n headers: { ...options?.headers, 'X-Stainless-Helper-Method': 'stream' },\n }));\n return runner;\n }\n async _createOrRetrieveResponse(client, params, options) {\n const signal = options?.signal;\n if (signal) {\n if (signal.aborted)\n this.controller.abort();\n signal.addEventListener('abort', () => this.controller.abort());\n }\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_beginRequest).call(this);\n let stream;\n let starting_after = null;\n if ('response_id' in params) {\n stream = await client.responses.retrieve(params.response_id, { stream: true }, { ...options, signal: this.controller.signal, stream: true });\n starting_after = params.starting_after ?? null;\n }\n else {\n stream = await client.responses.create({ ...params, stream: true }, { ...options, signal: this.controller.signal });\n }\n this._connected();\n for await (const event of stream) {\n __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_addEvent).call(this, event, starting_after);\n }\n if (stream.controller.signal?.aborted) {\n throw new APIUserAbortError();\n }\n return __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_endRequest).call(this);\n }\n [(_ResponseStream_params = new WeakMap(), _ResponseStream_currentResponseSnapshot = new WeakMap(), _ResponseStream_finalResponse = new WeakMap(), _ResponseStream_instances = new WeakSet(), _ResponseStream_beginRequest = function _ResponseStream_beginRequest() {\n if (this.ended)\n return;\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n }, _ResponseStream_addEvent = function _ResponseStream_addEvent(event, starting_after) {\n if (this.ended)\n return;\n const maybeEmit = (name, event) => {\n if (starting_after == null || event.sequence_number > starting_after) {\n this._emit(name, event);\n }\n };\n const response = __classPrivateFieldGet(this, _ResponseStream_instances, \"m\", _ResponseStream_accumulateResponse).call(this, event);\n maybeEmit('event', event);\n switch (event.type) {\n case 'response.output_text.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n maybeEmit('response.output_text.delta', {\n ...event,\n snapshot: content.text,\n });\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = response.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n maybeEmit('response.function_call_arguments.delta', {\n ...event,\n snapshot: output.arguments,\n });\n }\n break;\n }\n default:\n maybeEmit(event.type, event);\n break;\n }\n }, _ResponseStream_endRequest = function _ResponseStream_endRequest() {\n if (this.ended) {\n throw new OpenAIError(`stream has ended, this shouldn't happen`);\n }\n const snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n throw new OpenAIError(`request ended without sending any events`);\n }\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, undefined, \"f\");\n const parsedResponse = finalizeResponse(snapshot, __classPrivateFieldGet(this, _ResponseStream_params, \"f\"));\n __classPrivateFieldSet(this, _ResponseStream_finalResponse, parsedResponse, \"f\");\n return parsedResponse;\n }, _ResponseStream_accumulateResponse = function _ResponseStream_accumulateResponse(event) {\n let snapshot = __classPrivateFieldGet(this, _ResponseStream_currentResponseSnapshot, \"f\");\n if (!snapshot) {\n if (event.type !== 'response.created') {\n throw new OpenAIError(`When snapshot hasn't been set yet, expected 'response.created' event, got ${event.type}`);\n }\n snapshot = __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n return snapshot;\n }\n switch (event.type) {\n case 'response.output_item.added': {\n snapshot.output.push(event.item);\n break;\n }\n case 'response.content_part.added': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n const type = output.type;\n const part = event.part;\n if (type === 'message' && part.type !== 'reasoning_text') {\n output.content.push(part);\n }\n else if (type === 'reasoning' && part.type === 'reasoning_text') {\n if (!output.content) {\n output.content = [];\n }\n output.content.push(part);\n }\n break;\n }\n case 'response.output_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'message') {\n const content = output.content[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'output_text') {\n throw new OpenAIError(`expected content to be 'output_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.function_call_arguments.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'function_call') {\n output.arguments += event.delta;\n }\n break;\n }\n case 'response.reasoning_text.delta': {\n const output = snapshot.output[event.output_index];\n if (!output) {\n throw new OpenAIError(`missing output at index ${event.output_index}`);\n }\n if (output.type === 'reasoning') {\n const content = output.content?.[event.content_index];\n if (!content) {\n throw new OpenAIError(`missing content at index ${event.content_index}`);\n }\n if (content.type !== 'reasoning_text') {\n throw new OpenAIError(`expected content to be 'reasoning_text', got ${content.type}`);\n }\n content.text += event.delta;\n }\n break;\n }\n case 'response.completed': {\n __classPrivateFieldSet(this, _ResponseStream_currentResponseSnapshot, event.response, \"f\");\n break;\n }\n }\n return snapshot;\n }, Symbol.asyncIterator)]() {\n const pushQueue = [];\n const readQueue = [];\n let done = false;\n this.on('event', (event) => {\n const reader = readQueue.shift();\n if (reader) {\n reader.resolve(event);\n }\n else {\n pushQueue.push(event);\n }\n });\n this.on('end', () => {\n done = true;\n for (const reader of readQueue) {\n reader.resolve(undefined);\n }\n readQueue.length = 0;\n });\n this.on('abort', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n this.on('error', (err) => {\n done = true;\n for (const reader of readQueue) {\n reader.reject(err);\n }\n readQueue.length = 0;\n });\n return {\n next: async () => {\n if (!pushQueue.length) {\n if (done) {\n return { value: undefined, done: true };\n }\n return new Promise((resolve, reject) => readQueue.push({ resolve, reject })).then((event) => (event ? { value: event, done: false } : { value: undefined, done: true }));\n }\n const event = pushQueue.shift();\n return { value: event, done: false };\n },\n return: async () => {\n this.abort();\n return { value: undefined, done: true };\n },\n };\n }\n /**\n * @returns a promise that resolves with the final Response, or rejects\n * if an error occurred or the stream ended prematurely without producing a REsponse.\n */\n async finalResponse() {\n await this.done();\n const response = __classPrivateFieldGet(this, _ResponseStream_finalResponse, \"f\");\n if (!response)\n throw new OpenAIError('stream ended without producing a ChatCompletion');\n return response;\n }\n}\nfunction finalizeResponse(snapshot, params) {\n return maybeParseResponse(snapshot, params);\n}\n//# sourceMappingURL=ResponseStream.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class InputItems extends APIResource {\n /**\n * Returns a list of input items for a given response.\n *\n * @example\n * ```ts\n * // Automatically fetches more pages as needed.\n * for await (const responseItem of client.responses.inputItems.list(\n * 'response_id',\n * )) {\n * // ...\n * }\n * ```\n */\n list(responseID, query = {}, options) {\n return this._client.getAPIList(path `/responses/${responseID}/input_items`, (CursorPage), { query, ...options });\n }\n}\n//# sourceMappingURL=input-items.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { parseResponse, addOutputText, } from \"../../lib/ResponsesParser.mjs\";\nimport { ResponseStream } from \"../../lib/responses/ResponseStream.mjs\";\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as InputItemsAPI from \"./input-items.mjs\";\nimport { InputItems } from \"./input-items.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Responses extends APIResource {\n constructor() {\n super(...arguments);\n this.inputItems = new InputItemsAPI.InputItems(this._client);\n }\n create(body, options) {\n return this._client.post('/responses', { body, ...options, stream: body.stream ?? false })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n retrieve(responseID, query = {}, options) {\n return this._client.get(path `/responses/${responseID}`, {\n query,\n ...options,\n stream: query?.stream ?? false,\n })._thenUnwrap((rsp) => {\n if ('object' in rsp && rsp.object === 'response') {\n addOutputText(rsp);\n }\n return rsp;\n });\n }\n /**\n * Deletes a model response with the given ID.\n *\n * @example\n * ```ts\n * await client.responses.delete(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n delete(responseID, options) {\n return this._client.delete(path `/responses/${responseID}`, {\n ...options,\n headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),\n });\n }\n parse(body, options) {\n return this._client.responses\n .create(body, options)\n ._thenUnwrap((response) => parseResponse(response, body));\n }\n /**\n * Creates a model response stream\n */\n stream(body, options) {\n return ResponseStream.createResponse(this._client, body, options);\n }\n /**\n * Cancels a model response with the given ID. Only responses created with the\n * `background` parameter set to `true` can be cancelled.\n * [Learn more](https://platform.openai.com/docs/guides/background).\n *\n * @example\n * ```ts\n * const response = await client.responses.cancel(\n * 'resp_677efb5139a88190b512bc3fef8e535d',\n * );\n * ```\n */\n cancel(responseID, options) {\n return this._client.post(path `/responses/${responseID}/cancel`, options);\n }\n}\nResponses.InputItems = InputItems;\n//# sourceMappingURL=responses.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { multipartFormRequestOptions } from \"../../internal/uploads.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Parts extends APIResource {\n /**\n * Adds a\n * [Part](https://platform.openai.com/docs/api-reference/uploads/part-object) to an\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object.\n * A Part represents a chunk of bytes from the file you are trying to upload.\n *\n * Each Part can be at most 64 MB, and you can add Parts until you hit the Upload\n * maximum of 8 GB.\n *\n * It is possible to add multiple Parts in parallel. You can decide the intended\n * order of the Parts when you\n * [complete the Upload](https://platform.openai.com/docs/api-reference/uploads/complete).\n */\n create(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/parts`, multipartFormRequestOptions({ body, ...options }, this._client));\n }\n}\n//# sourceMappingURL=parts.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as PartsAPI from \"./parts.mjs\";\nimport { Parts } from \"./parts.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Uploads extends APIResource {\n constructor() {\n super(...arguments);\n this.parts = new PartsAPI.Parts(this._client);\n }\n /**\n * Creates an intermediate\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object) object\n * that you can add\n * [Parts](https://platform.openai.com/docs/api-reference/uploads/part-object) to.\n * Currently, an Upload can accept at most 8 GB in total and expires after an hour\n * after you create it.\n *\n * Once you complete the Upload, we will create a\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * contains all the parts you uploaded. This File is usable in the rest of our\n * platform as a regular File object.\n *\n * For certain `purpose` values, the correct `mime_type` must be specified. Please\n * refer to documentation for the\n * [supported MIME types for your use case](https://platform.openai.com/docs/assistants/tools/file-search#supported-files).\n *\n * For guidance on the proper filename extensions for each purpose, please follow\n * the documentation on\n * [creating a File](https://platform.openai.com/docs/api-reference/files/create).\n */\n create(body, options) {\n return this._client.post('/uploads', { body, ...options });\n }\n /**\n * Cancels the Upload. No Parts may be added after an Upload is cancelled.\n */\n cancel(uploadID, options) {\n return this._client.post(path `/uploads/${uploadID}/cancel`, options);\n }\n /**\n * Completes the\n * [Upload](https://platform.openai.com/docs/api-reference/uploads/object).\n *\n * Within the returned Upload object, there is a nested\n * [File](https://platform.openai.com/docs/api-reference/files/object) object that\n * is ready to use in the rest of the platform.\n *\n * You can specify the order of the Parts by passing in an ordered list of the Part\n * IDs.\n *\n * The number of bytes uploaded upon completion must match the number of bytes\n * initially specified when creating the Upload object. No Parts may be added after\n * an Upload is completed.\n */\n complete(uploadID, body, options) {\n return this._client.post(path `/uploads/${uploadID}/complete`, { body, ...options });\n }\n}\nUploads.Parts = Parts;\n//# sourceMappingURL=uploads.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils/sleep.mjs\";\nimport { allSettledWithThrow } from \"../../lib/Util.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class FileBatches extends APIResource {\n /**\n * Create a vector store file batch.\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/file_batches`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file batch.\n */\n retrieve(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/file_batches/${batchID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Cancel a vector store file batch. This attempts to cancel the processing of\n * files in this batch as soon as possible.\n */\n cancel(batchID, params, options) {\n const { vector_store_id } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/cancel`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Create a vector store batch and poll until all files have been processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const batch = await this.create(vectorStoreId, body);\n return await this.poll(vectorStoreId, batch.id, options);\n }\n /**\n * Returns a list of vector store files in a batch.\n */\n listFiles(batchID, params, options) {\n const { vector_store_id, ...query } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/file_batches/${batchID}/files`, (CursorPage), { query, ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n /**\n * Wait for the given file batch to be processed.\n *\n * Note: this will return even if one of the files failed to process, you need to\n * check batch.file_counts.failed_count to handle this case.\n */\n async poll(vectorStoreID, batchID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const { data: batch, response } = await this.retrieve(batchID, { vector_store_id: vectorStoreID }, {\n ...options,\n headers,\n }).withResponse();\n switch (batch.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'cancelled':\n case 'completed':\n return batch;\n }\n }\n }\n /**\n * Uploads the given files concurrently and then creates a vector store file batch.\n *\n * The concurrency limit is configurable using the `maxConcurrency` parameter.\n */\n async uploadAndPoll(vectorStoreId, { files, fileIds = [] }, options) {\n if (files == null || files.length == 0) {\n throw new Error(`No \\`files\\` provided to process. If you've already uploaded files you should use \\`.createAndPoll()\\` instead`);\n }\n const configuredConcurrency = options?.maxConcurrency ?? 5;\n // We cap the number of workers at the number of files (so we don't start any unnecessary workers)\n const concurrencyLimit = Math.min(configuredConcurrency, files.length);\n const client = this._client;\n const fileIterator = files.values();\n const allFileIds = [...fileIds];\n // This code is based on this design. The libraries don't accommodate our environment limits.\n // https://stackoverflow.com/questions/40639432/what-is-the-best-way-to-limit-concurrency-when-using-es6s-promise-all\n async function processFiles(iterator) {\n for (let item of iterator) {\n const fileObj = await client.files.create({ file: item, purpose: 'assistants' }, options);\n allFileIds.push(fileObj.id);\n }\n }\n // Start workers to process results\n const workers = Array(concurrencyLimit).fill(fileIterator).map(processFiles);\n // Wait for all processing to complete.\n await allSettledWithThrow(workers);\n return await this.createAndPoll(vectorStoreId, {\n file_ids: allFileIds,\n });\n }\n}\n//# sourceMappingURL=file-batches.mjs.map","/**\n * Like `Promise.allSettled()` but throws an error if any promises are rejected.\n */\nexport const allSettledWithThrow = async (promises) => {\n const results = await Promise.allSettled(promises);\n const rejected = results.filter((result) => result.status === 'rejected');\n if (rejected.length) {\n for (const result of rejected) {\n console.error(result.reason);\n }\n throw new Error(`${rejected.length} promise(s) failed - see the above errors`);\n }\n // Note: TS was complaining about using `.filter().map()` here for some reason\n const values = [];\n for (const result of results) {\n if (result.status === 'fulfilled') {\n values.push(result.value);\n }\n }\n return values;\n};\n//# sourceMappingURL=Util.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { sleep } from \"../../internal/utils.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class Files extends APIResource {\n /**\n * Create a vector store file by attaching a\n * [File](https://platform.openai.com/docs/api-reference/files) to a\n * [vector store](https://platform.openai.com/docs/api-reference/vector-stores/object).\n */\n create(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}/files`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store file.\n */\n retrieve(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.get(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Update attributes on a vector store file.\n */\n update(fileID, params, options) {\n const { vector_store_id, ...body } = params;\n return this._client.post(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector store files.\n */\n list(vectorStoreID, query = {}, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/files`, (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store file. This will remove the file from the vector store but\n * the file itself will not be deleted. To delete the file, use the\n * [delete file](https://platform.openai.com/docs/api-reference/files/delete)\n * endpoint.\n */\n delete(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.delete(path `/vector_stores/${vector_store_id}/files/${fileID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Attach a file to the given vector store and wait for it to be processed.\n */\n async createAndPoll(vectorStoreId, body, options) {\n const file = await this.create(vectorStoreId, body, options);\n return await this.poll(vectorStoreId, file.id, options);\n }\n /**\n * Wait for the vector store file to finish processing.\n *\n * Note: this will return even if the file failed to process, you need to check\n * file.last_error and file.status to handle these cases\n */\n async poll(vectorStoreID, fileID, options) {\n const headers = buildHeaders([\n options?.headers,\n {\n 'X-Stainless-Poll-Helper': 'true',\n 'X-Stainless-Custom-Poll-Interval': options?.pollIntervalMs?.toString() ?? undefined,\n },\n ]);\n while (true) {\n const fileResponse = await this.retrieve(fileID, {\n vector_store_id: vectorStoreID,\n }, { ...options, headers }).withResponse();\n const file = fileResponse.data;\n switch (file.status) {\n case 'in_progress':\n let sleepInterval = 5000;\n if (options?.pollIntervalMs) {\n sleepInterval = options.pollIntervalMs;\n }\n else {\n const headerInterval = fileResponse.response.headers.get('openai-poll-after-ms');\n if (headerInterval) {\n const headerIntervalMs = parseInt(headerInterval);\n if (!isNaN(headerIntervalMs)) {\n sleepInterval = headerIntervalMs;\n }\n }\n }\n await sleep(sleepInterval);\n break;\n case 'failed':\n case 'completed':\n return file;\n }\n }\n }\n /**\n * Upload a file to the `files` API and then attach it to the given vector store.\n *\n * Note the file will be asynchronously processed (you can use the alternative\n * polling helper method to wait for processing to complete).\n */\n async upload(vectorStoreId, file, options) {\n const fileInfo = await this._client.files.create({ file: file, purpose: 'assistants' }, options);\n return this.create(vectorStoreId, { file_id: fileInfo.id }, options);\n }\n /**\n * Add a file to a vector store and poll until processing is complete.\n */\n async uploadAndPoll(vectorStoreId, file, options) {\n const fileInfo = await this.upload(vectorStoreId, file, options);\n return await this.poll(vectorStoreId, fileInfo.id, options);\n }\n /**\n * Retrieve the parsed contents of a vector store file.\n */\n content(fileID, params, options) {\n const { vector_store_id } = params;\n return this._client.getAPIList(path `/vector_stores/${vector_store_id}/files/${fileID}/content`, (Page), { ...options, headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]) });\n }\n}\n//# sourceMappingURL=files.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nimport { APIResource } from \"../../core/resource.mjs\";\nimport * as FileBatchesAPI from \"./file-batches.mjs\";\nimport { FileBatches, } from \"./file-batches.mjs\";\nimport * as FilesAPI from \"./files.mjs\";\nimport { Files, } from \"./files.mjs\";\nimport { CursorPage, Page } from \"../../core/pagination.mjs\";\nimport { buildHeaders } from \"../../internal/headers.mjs\";\nimport { path } from \"../../internal/utils/path.mjs\";\nexport class VectorStores extends APIResource {\n constructor() {\n super(...arguments);\n this.files = new FilesAPI.Files(this._client);\n this.fileBatches = new FileBatchesAPI.FileBatches(this._client);\n }\n /**\n * Create a vector store.\n */\n create(body, options) {\n return this._client.post('/vector_stores', {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Retrieves a vector store.\n */\n retrieve(vectorStoreID, options) {\n return this._client.get(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Modifies a vector store.\n */\n update(vectorStoreID, body, options) {\n return this._client.post(path `/vector_stores/${vectorStoreID}`, {\n body,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Returns a list of vector stores.\n */\n list(query = {}, options) {\n return this._client.getAPIList('/vector_stores', (CursorPage), {\n query,\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Delete a vector store.\n */\n delete(vectorStoreID, options) {\n return this._client.delete(path `/vector_stores/${vectorStoreID}`, {\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n /**\n * Search a vector store for relevant chunks based on a query and file attributes\n * filter.\n */\n search(vectorStoreID, body, options) {\n return this._client.getAPIList(path `/vector_stores/${vectorStoreID}/search`, (Page), {\n body,\n method: 'post',\n ...options,\n headers: buildHeaders([{ 'OpenAI-Beta': 'assistants=v2' }, options?.headers]),\n });\n }\n}\nVectorStores.Files = Files;\nVectorStores.FileBatches = FileBatches;\n//# sourceMappingURL=vector-stores.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _Webhooks_instances, _Webhooks_validateSecret, _Webhooks_getRequiredHeader;\nimport { __classPrivateFieldGet } from \"../internal/tslib.mjs\";\nimport { InvalidWebhookSignatureError } from \"../error.mjs\";\nimport { APIResource } from \"../core/resource.mjs\";\nimport { buildHeaders } from \"../internal/headers.mjs\";\nexport class Webhooks extends APIResource {\n constructor() {\n super(...arguments);\n _Webhooks_instances.add(this);\n }\n /**\n * Validates that the given payload was sent by OpenAI and parses the payload.\n */\n async unwrap(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n await this.verifySignature(payload, headers, secret, tolerance);\n return JSON.parse(payload);\n }\n /**\n * Validates whether or not the webhook payload was sent by OpenAI.\n *\n * An error will be raised if the webhook payload was not sent by OpenAI.\n *\n * @param payload - The webhook payload\n * @param headers - The webhook headers\n * @param secret - The webhook secret (optional, will use client secret if not provided)\n * @param tolerance - Maximum age of the webhook in seconds (default: 300 = 5 minutes)\n */\n async verifySignature(payload, headers, secret = this._client.webhookSecret, tolerance = 300) {\n if (typeof crypto === 'undefined' ||\n typeof crypto.subtle.importKey !== 'function' ||\n typeof crypto.subtle.verify !== 'function') {\n throw new Error('Webhook signature verification is only supported when the `crypto` global is defined');\n }\n __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_validateSecret).call(this, secret);\n const headersObj = buildHeaders([headers]).values;\n const signatureHeader = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-signature');\n const timestamp = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-timestamp');\n const webhookId = __classPrivateFieldGet(this, _Webhooks_instances, \"m\", _Webhooks_getRequiredHeader).call(this, headersObj, 'webhook-id');\n // Validate timestamp to prevent replay attacks\n const timestampSeconds = parseInt(timestamp, 10);\n if (isNaN(timestampSeconds)) {\n throw new InvalidWebhookSignatureError('Invalid webhook timestamp format');\n }\n const nowSeconds = Math.floor(Date.now() / 1000);\n if (nowSeconds - timestampSeconds > tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too old');\n }\n if (timestampSeconds > nowSeconds + tolerance) {\n throw new InvalidWebhookSignatureError('Webhook timestamp is too new');\n }\n // Extract signatures from v1, format\n // The signature header can have multiple values, separated by spaces.\n // Each value is in the format v1,. We should accept if any match.\n const signatures = signatureHeader\n .split(' ')\n .map((part) => (part.startsWith('v1,') ? part.substring(3) : part));\n // Decode the secret if it starts with whsec_\n const decodedSecret = secret.startsWith('whsec_') ?\n Buffer.from(secret.replace('whsec_', ''), 'base64')\n : Buffer.from(secret, 'utf-8');\n // Create the signed payload: {webhook_id}.{timestamp}.{payload}\n const signedPayload = webhookId ? `${webhookId}.${timestamp}.${payload}` : `${timestamp}.${payload}`;\n // Import the secret as a cryptographic key for HMAC\n const key = await crypto.subtle.importKey('raw', decodedSecret, { name: 'HMAC', hash: 'SHA-256' }, false, ['verify']);\n // Check if any signature matches using timing-safe WebCrypto verify\n for (const signature of signatures) {\n try {\n const signatureBytes = Buffer.from(signature, 'base64');\n const isValid = await crypto.subtle.verify('HMAC', key, signatureBytes, new TextEncoder().encode(signedPayload));\n if (isValid) {\n return; // Valid signature found\n }\n }\n catch {\n // Invalid base64 or signature format, continue to next signature\n continue;\n }\n }\n throw new InvalidWebhookSignatureError('The given webhook signature does not match the expected signature');\n }\n}\n_Webhooks_instances = new WeakSet(), _Webhooks_validateSecret = function _Webhooks_validateSecret(secret) {\n if (typeof secret !== 'string' || secret.length === 0) {\n throw new Error(`The webhook secret must either be set using the env var, OPENAI_WEBHOOK_SECRET, on the client class, OpenAI({ webhookSecret: '123' }), or passed to this function`);\n }\n}, _Webhooks_getRequiredHeader = function _Webhooks_getRequiredHeader(headers, name) {\n if (!headers) {\n throw new Error(`Headers are required`);\n }\n const value = headers.get(name);\n if (value === null || value === undefined) {\n throw new Error(`Missing required header: ${name}`);\n }\n return value;\n};\n//# sourceMappingURL=webhooks.mjs.map","// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.\nvar _OpenAI_instances, _a, _OpenAI_encoder, _OpenAI_baseURLOverridden;\nimport { __classPrivateFieldGet, __classPrivateFieldSet } from \"./internal/tslib.mjs\";\nimport { uuid4 } from \"./internal/utils/uuid.mjs\";\nimport { validatePositiveInteger, isAbsoluteURL, safeJSON } from \"./internal/utils/values.mjs\";\nimport { sleep } from \"./internal/utils/sleep.mjs\";\nimport { castToError, isAbortError } from \"./internal/errors.mjs\";\nimport { getPlatformHeaders } from \"./internal/detect-platform.mjs\";\nimport * as Shims from \"./internal/shims.mjs\";\nimport * as Opts from \"./internal/request-options.mjs\";\nimport * as qs from \"./internal/qs/index.mjs\";\nimport { VERSION } from \"./version.mjs\";\nimport * as Errors from \"./core/error.mjs\";\nimport * as Pagination from \"./core/pagination.mjs\";\nimport * as Uploads from \"./core/uploads.mjs\";\nimport * as API from \"./resources/index.mjs\";\nimport { APIPromise } from \"./core/api-promise.mjs\";\nimport { Batches, } from \"./resources/batches.mjs\";\nimport { Completions, } from \"./resources/completions.mjs\";\nimport { Embeddings, } from \"./resources/embeddings.mjs\";\nimport { Files, } from \"./resources/files.mjs\";\nimport { Images, } from \"./resources/images.mjs\";\nimport { Models } from \"./resources/models.mjs\";\nimport { Moderations, } from \"./resources/moderations.mjs\";\nimport { Webhooks } from \"./resources/webhooks.mjs\";\nimport { Audio } from \"./resources/audio/audio.mjs\";\nimport { Beta } from \"./resources/beta/beta.mjs\";\nimport { Chat } from \"./resources/chat/chat.mjs\";\nimport { Containers, } from \"./resources/containers/containers.mjs\";\nimport { Conversations } from \"./resources/conversations/conversations.mjs\";\nimport { Evals, } from \"./resources/evals/evals.mjs\";\nimport { FineTuning } from \"./resources/fine-tuning/fine-tuning.mjs\";\nimport { Graders } from \"./resources/graders/graders.mjs\";\nimport { Realtime } from \"./resources/realtime/realtime.mjs\";\nimport { Responses } from \"./resources/responses/responses.mjs\";\nimport { Uploads as UploadsAPIUploads, } from \"./resources/uploads/uploads.mjs\";\nimport { VectorStores, } from \"./resources/vector-stores/vector-stores.mjs\";\nimport { isRunningInBrowser } from \"./internal/detect-platform.mjs\";\nimport { buildHeaders } from \"./internal/headers.mjs\";\nimport { readEnv } from \"./internal/utils/env.mjs\";\nimport { formatRequestDetails, loggerFor, parseLogLevel, } from \"./internal/utils/log.mjs\";\nimport { isEmptyObj } from \"./internal/utils/values.mjs\";\n/**\n * API Client for interfacing with the OpenAI API.\n */\nexport class OpenAI {\n /**\n * API Client for interfacing with the OpenAI API.\n *\n * @param {string | undefined} [opts.apiKey=process.env['OPENAI_API_KEY'] ?? undefined]\n * @param {string | null | undefined} [opts.organization=process.env['OPENAI_ORG_ID'] ?? null]\n * @param {string | null | undefined} [opts.project=process.env['OPENAI_PROJECT_ID'] ?? null]\n * @param {string | null | undefined} [opts.webhookSecret=process.env['OPENAI_WEBHOOK_SECRET'] ?? null]\n * @param {string} [opts.baseURL=process.env['OPENAI_BASE_URL'] ?? https://api.openai.com/v1] - Override the default base URL for the API.\n * @param {number} [opts.timeout=10 minutes] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.\n * @param {MergedRequestInit} [opts.fetchOptions] - Additional `RequestInit` options to be passed to `fetch` calls.\n * @param {Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.\n * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.\n * @param {HeadersLike} opts.defaultHeaders - Default headers to include with every request to the API.\n * @param {Record} opts.defaultQuery - Default query parameters to include with every request to the API.\n * @param {boolean} [opts.dangerouslyAllowBrowser=false] - By default, client-side use of this library is not allowed, as it risks exposing your secret API credentials to attackers.\n */\n constructor({ baseURL = readEnv('OPENAI_BASE_URL'), apiKey = readEnv('OPENAI_API_KEY'), organization = readEnv('OPENAI_ORG_ID') ?? null, project = readEnv('OPENAI_PROJECT_ID') ?? null, webhookSecret = readEnv('OPENAI_WEBHOOK_SECRET') ?? null, ...opts } = {}) {\n _OpenAI_instances.add(this);\n _OpenAI_encoder.set(this, void 0);\n this.completions = new API.Completions(this);\n this.chat = new API.Chat(this);\n this.embeddings = new API.Embeddings(this);\n this.files = new API.Files(this);\n this.images = new API.Images(this);\n this.audio = new API.Audio(this);\n this.moderations = new API.Moderations(this);\n this.models = new API.Models(this);\n this.fineTuning = new API.FineTuning(this);\n this.graders = new API.Graders(this);\n this.vectorStores = new API.VectorStores(this);\n this.webhooks = new API.Webhooks(this);\n this.beta = new API.Beta(this);\n this.batches = new API.Batches(this);\n this.uploads = new API.Uploads(this);\n this.responses = new API.Responses(this);\n this.realtime = new API.Realtime(this);\n this.conversations = new API.Conversations(this);\n this.evals = new API.Evals(this);\n this.containers = new API.Containers(this);\n if (apiKey === undefined) {\n throw new Errors.OpenAIError('Missing credentials. Please pass an `apiKey`, or set the `OPENAI_API_KEY` environment variable.');\n }\n const options = {\n apiKey,\n organization,\n project,\n webhookSecret,\n ...opts,\n baseURL: baseURL || `https://api.openai.com/v1`,\n };\n if (!options.dangerouslyAllowBrowser && isRunningInBrowser()) {\n throw new Errors.OpenAIError(\"It looks like you're running in a browser-like environment.\\n\\nThis is disabled by default, as it risks exposing your secret API credentials to attackers.\\nIf you understand the risks and have appropriate mitigations in place,\\nyou can set the `dangerouslyAllowBrowser` option to `true`, e.g.,\\n\\nnew OpenAI({ apiKey, dangerouslyAllowBrowser: true });\\n\\nhttps://help.openai.com/en/articles/5112595-best-practices-for-api-key-safety\\n\");\n }\n this.baseURL = options.baseURL;\n this.timeout = options.timeout ?? _a.DEFAULT_TIMEOUT /* 10 minutes */;\n this.logger = options.logger ?? console;\n const defaultLogLevel = 'warn';\n // Set default logLevel early so that we can log a warning in parseLogLevel.\n this.logLevel = defaultLogLevel;\n this.logLevel =\n parseLogLevel(options.logLevel, 'ClientOptions.logLevel', this) ??\n parseLogLevel(readEnv('OPENAI_LOG'), \"process.env['OPENAI_LOG']\", this) ??\n defaultLogLevel;\n this.fetchOptions = options.fetchOptions;\n this.maxRetries = options.maxRetries ?? 2;\n this.fetch = options.fetch ?? Shims.getDefaultFetch();\n __classPrivateFieldSet(this, _OpenAI_encoder, Opts.FallbackEncoder, \"f\");\n this._options = options;\n this.apiKey = typeof apiKey === 'string' ? apiKey : 'Missing Key';\n this.organization = organization;\n this.project = project;\n this.webhookSecret = webhookSecret;\n }\n /**\n * Create a new client instance re-using the same options given to the current client with optional overriding.\n */\n withOptions(options) {\n const client = new this.constructor({\n ...this._options,\n baseURL: this.baseURL,\n maxRetries: this.maxRetries,\n timeout: this.timeout,\n logger: this.logger,\n logLevel: this.logLevel,\n fetch: this.fetch,\n fetchOptions: this.fetchOptions,\n apiKey: this.apiKey,\n organization: this.organization,\n project: this.project,\n webhookSecret: this.webhookSecret,\n ...options,\n });\n return client;\n }\n defaultQuery() {\n return this._options.defaultQuery;\n }\n validateHeaders({ values, nulls }) {\n return;\n }\n async authHeaders(opts) {\n return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);\n }\n stringifyQuery(query) {\n return qs.stringify(query, { arrayFormat: 'brackets' });\n }\n getUserAgent() {\n return `${this.constructor.name}/JS ${VERSION}`;\n }\n defaultIdempotencyKey() {\n return `stainless-node-retry-${uuid4()}`;\n }\n makeStatusError(status, error, message, headers) {\n return Errors.APIError.generate(status, error, message, headers);\n }\n async _callApiKey() {\n const apiKey = this._options.apiKey;\n if (typeof apiKey !== 'function')\n return false;\n let token;\n try {\n token = await apiKey();\n }\n catch (err) {\n if (err instanceof Errors.OpenAIError)\n throw err;\n throw new Errors.OpenAIError(`Failed to get token from 'apiKey' function: ${err.message}`, \n // @ts-ignore\n { cause: err });\n }\n if (typeof token !== 'string' || !token) {\n throw new Errors.OpenAIError(`Expected 'apiKey' function argument to return a string but it returned ${token}`);\n }\n this.apiKey = token;\n return true;\n }\n buildURL(path, query, defaultBaseURL) {\n const baseURL = (!__classPrivateFieldGet(this, _OpenAI_instances, \"m\", _OpenAI_baseURLOverridden).call(this) && defaultBaseURL) || this.baseURL;\n const url = isAbsoluteURL(path) ?\n new URL(path)\n : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));\n const defaultQuery = this.defaultQuery();\n if (!isEmptyObj(defaultQuery)) {\n query = { ...defaultQuery, ...query };\n }\n if (typeof query === 'object' && query && !Array.isArray(query)) {\n url.search = this.stringifyQuery(query);\n }\n return url.toString();\n }\n /**\n * Used as a callback for mutating the given `FinalRequestOptions` object.\n */\n async prepareOptions(options) {\n await this._callApiKey();\n }\n /**\n * Used as a callback for mutating the given `RequestInit` object.\n *\n * This is useful for cases where you want to add certain headers based off of\n * the request properties, e.g. `method` or `url`.\n */\n async prepareRequest(request, { url, options }) { }\n get(path, opts) {\n return this.methodRequest('get', path, opts);\n }\n post(path, opts) {\n return this.methodRequest('post', path, opts);\n }\n patch(path, opts) {\n return this.methodRequest('patch', path, opts);\n }\n put(path, opts) {\n return this.methodRequest('put', path, opts);\n }\n delete(path, opts) {\n return this.methodRequest('delete', path, opts);\n }\n methodRequest(method, path, opts) {\n return this.request(Promise.resolve(opts).then((opts) => {\n return { method, path, ...opts };\n }));\n }\n request(options, remainingRetries = null) {\n return new APIPromise(this, this.makeRequest(options, remainingRetries, undefined));\n }\n async makeRequest(optionsInput, retriesRemaining, retryOfRequestLogID) {\n const options = await optionsInput;\n const maxRetries = options.maxRetries ?? this.maxRetries;\n if (retriesRemaining == null) {\n retriesRemaining = maxRetries;\n }\n await this.prepareOptions(options);\n const { req, url, timeout } = await this.buildRequest(options, {\n retryCount: maxRetries - retriesRemaining,\n });\n await this.prepareRequest(req, { url, options });\n /** Not an API request ID, just for correlating local log entries. */\n const requestLogID = 'log_' + ((Math.random() * (1 << 24)) | 0).toString(16).padStart(6, '0');\n const retryLogStr = retryOfRequestLogID === undefined ? '' : `, retryOf: ${retryOfRequestLogID}`;\n const startTime = Date.now();\n loggerFor(this).debug(`[${requestLogID}] sending request`, formatRequestDetails({\n retryOfRequestLogID,\n method: options.method,\n url,\n options,\n headers: req.headers,\n }));\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n const controller = new AbortController();\n const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError);\n const headersTime = Date.now();\n if (response instanceof globalThis.Error) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n if (options.signal?.aborted) {\n throw new Errors.APIUserAbortError();\n }\n // detect native connection timeout errors\n // deno throws \"TypeError: error sending request for url (https://example/): client error (Connect): tcp connect error: Operation timed out (os error 60): Operation timed out (os error 60)\"\n // undici throws \"TypeError: fetch failed\" with cause \"ConnectTimeoutError: Connect Timeout Error (attempted address: example:443, timeout: 1ms)\"\n // others do not provide enough information to distinguish timeouts from other connection errors\n const isTimeout = isAbortError(response) ||\n /timed? ?out/i.test(String(response) + ('cause' in response ? String(response.cause) : ''));\n if (retriesRemaining) {\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID);\n }\n loggerFor(this).info(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} - error; no more retries left`);\n loggerFor(this).debug(`[${requestLogID}] connection ${isTimeout ? 'timed out' : 'failed'} (error; no more retries left)`, formatRequestDetails({\n retryOfRequestLogID,\n url,\n durationMs: headersTime - startTime,\n message: response.message,\n }));\n if (isTimeout) {\n throw new Errors.APIConnectionTimeoutError();\n }\n throw new Errors.APIConnectionError({ cause: response });\n }\n const specialHeaders = [...response.headers.entries()]\n .filter(([name]) => name === 'x-request-id')\n .map(([name, value]) => ', ' + name + ': ' + JSON.stringify(value))\n .join('');\n const responseInfo = `[${requestLogID}${retryLogStr}${specialHeaders}] ${req.method} ${url} ${response.ok ? 'succeeded' : 'failed'} with status ${response.status} in ${headersTime - startTime}ms`;\n if (!response.ok) {\n const shouldRetry = await this.shouldRetry(response);\n if (retriesRemaining && shouldRetry) {\n const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;\n // We don't need the body of this response.\n await Shims.CancelReadableStream(response.body);\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return this.retryRequest(options, retriesRemaining, retryOfRequestLogID ?? requestLogID, response.headers);\n }\n const retryMessage = shouldRetry ? `error; no more retries left` : `error; not retryable`;\n loggerFor(this).info(`${responseInfo} - ${retryMessage}`);\n const errText = await response.text().catch((err) => castToError(err).message);\n const errJSON = safeJSON(errText);\n const errMessage = errJSON ? undefined : errText;\n loggerFor(this).debug(`[${requestLogID}] response error (${retryMessage})`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n message: errMessage,\n durationMs: Date.now() - startTime,\n }));\n const err = this.makeStatusError(response.status, errJSON, errMessage, response.headers);\n throw err;\n }\n loggerFor(this).info(responseInfo);\n loggerFor(this).debug(`[${requestLogID}] response start`, formatRequestDetails({\n retryOfRequestLogID,\n url: response.url,\n status: response.status,\n headers: response.headers,\n durationMs: headersTime - startTime,\n }));\n return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };\n }\n getAPIList(path, Page, opts) {\n return this.requestAPIList(Page, { method: 'get', path, ...opts });\n }\n requestAPIList(Page, options) {\n const request = this.makeRequest(options, null, undefined);\n return new Pagination.PagePromise(this, request, Page);\n }\n async fetchWithTimeout(url, init, ms, controller) {\n const { signal, method, ...options } = init || {};\n if (signal)\n signal.addEventListener('abort', () => controller.abort());\n const timeout = setTimeout(() => controller.abort(), ms);\n const isReadableBody = (globalThis.ReadableStream && options.body instanceof globalThis.ReadableStream) ||\n (typeof options.body === 'object' && options.body !== null && Symbol.asyncIterator in options.body);\n const fetchOptions = {\n signal: controller.signal,\n ...(isReadableBody ? { duplex: 'half' } : {}),\n method: 'GET',\n ...options,\n };\n if (method) {\n // Custom methods like 'patch' need to be uppercased\n // See https://github.com/nodejs/undici/issues/2294\n fetchOptions.method = method.toUpperCase();\n }\n try {\n // use undefined this binding; fetch errors if bound to something else in browser/cloudflare\n return await this.fetch.call(undefined, url, fetchOptions);\n }\n finally {\n clearTimeout(timeout);\n }\n }\n async shouldRetry(response) {\n // Note this is not a standard header.\n const shouldRetryHeader = response.headers.get('x-should-retry');\n // If the server explicitly says whether or not to retry, obey.\n if (shouldRetryHeader === 'true')\n return true;\n if (shouldRetryHeader === 'false')\n return false;\n // Retry on request timeouts.\n if (response.status === 408)\n return true;\n // Retry on lock timeouts.\n if (response.status === 409)\n return true;\n // Retry on rate limits.\n if (response.status === 429)\n return true;\n // Retry internal errors.\n if (response.status >= 500)\n return true;\n return false;\n }\n async retryRequest(options, retriesRemaining, requestLogID, responseHeaders) {\n let timeoutMillis;\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMillisHeader = responseHeaders?.get('retry-after-ms');\n if (retryAfterMillisHeader) {\n const timeoutMs = parseFloat(retryAfterMillisHeader);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = timeoutMs;\n }\n }\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfterHeader = responseHeaders?.get('retry-after');\n if (retryAfterHeader && !timeoutMillis) {\n const timeoutSeconds = parseFloat(retryAfterHeader);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n }\n else {\n timeoutMillis = Date.parse(retryAfterHeader) - Date.now();\n }\n }\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {\n const maxRetries = options.maxRetries ?? this.maxRetries;\n timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);\n }\n await sleep(timeoutMillis);\n return this.makeRequest(options, retriesRemaining - 1, requestLogID);\n }\n calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries) {\n const initialRetryDelay = 0.5;\n const maxRetryDelay = 8.0;\n const numRetries = maxRetries - retriesRemaining;\n // Apply exponential backoff, but not more than the max.\n const sleepSeconds = Math.min(initialRetryDelay * Math.pow(2, numRetries), maxRetryDelay);\n // Apply some jitter, take up to at most 25 percent of the retry time.\n const jitter = 1 - Math.random() * 0.25;\n return sleepSeconds * jitter * 1000;\n }\n async buildRequest(inputOptions, { retryCount = 0 } = {}) {\n const options = { ...inputOptions };\n const { method, path, query, defaultBaseURL } = options;\n const url = this.buildURL(path, query, defaultBaseURL);\n if ('timeout' in options)\n validatePositiveInteger('timeout', options.timeout);\n options.timeout = options.timeout ?? this.timeout;\n const { bodyHeaders, body } = this.buildBody({ options });\n const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });\n const req = {\n method,\n headers: reqHeaders,\n ...(options.signal && { signal: options.signal }),\n ...(globalThis.ReadableStream &&\n body instanceof globalThis.ReadableStream && { duplex: 'half' }),\n ...(body && { body }),\n ...(this.fetchOptions ?? {}),\n ...(options.fetchOptions ?? {}),\n };\n return { req, url, timeout: options.timeout };\n }\n async buildHeaders({ options, method, bodyHeaders, retryCount, }) {\n let idempotencyHeaders = {};\n if (this.idempotencyHeader && method !== 'get') {\n if (!options.idempotencyKey)\n options.idempotencyKey = this.defaultIdempotencyKey();\n idempotencyHeaders[this.idempotencyHeader] = options.idempotencyKey;\n }\n const headers = buildHeaders([\n idempotencyHeaders,\n {\n Accept: 'application/json',\n 'User-Agent': this.getUserAgent(),\n 'X-Stainless-Retry-Count': String(retryCount),\n ...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),\n ...getPlatformHeaders(),\n 'OpenAI-Organization': this.organization,\n 'OpenAI-Project': this.project,\n },\n await this.authHeaders(options),\n this._options.defaultHeaders,\n bodyHeaders,\n options.headers,\n ]);\n this.validateHeaders(headers);\n return headers.values;\n }\n buildBody({ options: { body, headers: rawHeaders } }) {\n if (!body) {\n return { bodyHeaders: undefined, body: undefined };\n }\n const headers = buildHeaders([rawHeaders]);\n if (\n // Pass raw type verbatim\n ArrayBuffer.isView(body) ||\n body instanceof ArrayBuffer ||\n body instanceof DataView ||\n (typeof body === 'string' &&\n // Preserve legacy string encoding behavior for now\n headers.values.has('content-type')) ||\n // `Blob` is superset of `File`\n (globalThis.Blob && body instanceof globalThis.Blob) ||\n // `FormData` -> `multipart/form-data`\n body instanceof FormData ||\n // `URLSearchParams` -> `application/x-www-form-urlencoded`\n body instanceof URLSearchParams ||\n // Send chunked stream (each chunk has own `length`)\n (globalThis.ReadableStream && body instanceof globalThis.ReadableStream)) {\n return { bodyHeaders: undefined, body: body };\n }\n else if (typeof body === 'object' &&\n (Symbol.asyncIterator in body ||\n (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))) {\n return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body) };\n }\n else {\n return __classPrivateFieldGet(this, _OpenAI_encoder, \"f\").call(this, { body, headers });\n }\n }\n}\n_a = OpenAI, _OpenAI_encoder = new WeakMap(), _OpenAI_instances = new WeakSet(), _OpenAI_baseURLOverridden = function _OpenAI_baseURLOverridden() {\n return this.baseURL !== 'https://api.openai.com/v1';\n};\nOpenAI.OpenAI = _a;\nOpenAI.DEFAULT_TIMEOUT = 600000; // 10 minutes\nOpenAI.OpenAIError = Errors.OpenAIError;\nOpenAI.APIError = Errors.APIError;\nOpenAI.APIConnectionError = Errors.APIConnectionError;\nOpenAI.APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;\nOpenAI.APIUserAbortError = Errors.APIUserAbortError;\nOpenAI.NotFoundError = Errors.NotFoundError;\nOpenAI.ConflictError = Errors.ConflictError;\nOpenAI.RateLimitError = Errors.RateLimitError;\nOpenAI.BadRequestError = Errors.BadRequestError;\nOpenAI.AuthenticationError = Errors.AuthenticationError;\nOpenAI.InternalServerError = Errors.InternalServerError;\nOpenAI.PermissionDeniedError = Errors.PermissionDeniedError;\nOpenAI.UnprocessableEntityError = Errors.UnprocessableEntityError;\nOpenAI.InvalidWebhookSignatureError = Errors.InvalidWebhookSignatureError;\nOpenAI.toFile = Uploads.toFile;\nOpenAI.Completions = Completions;\nOpenAI.Chat = Chat;\nOpenAI.Embeddings = Embeddings;\nOpenAI.Files = Files;\nOpenAI.Images = Images;\nOpenAI.Audio = Audio;\nOpenAI.Moderations = Moderations;\nOpenAI.Models = Models;\nOpenAI.FineTuning = FineTuning;\nOpenAI.Graders = Graders;\nOpenAI.VectorStores = VectorStores;\nOpenAI.Webhooks = Webhooks;\nOpenAI.Beta = Beta;\nOpenAI.Batches = Batches;\nOpenAI.Uploads = UploadsAPIUploads;\nOpenAI.Responses = Responses;\nOpenAI.Realtime = Realtime;\nOpenAI.Conversations = Conversations;\nOpenAI.Evals = Evals;\nOpenAI.Containers = Containers;\n//# sourceMappingURL=client.mjs.map",null,null,null,null,null,null,null,null],"names":["n","l","u","i","r","o","e","f","c","s","a","h","p","v","d","w","_","g","Array","isArray","m","b","parentNode","removeChild","x","t","type","props","key","ref","__k","__","__b","__e","__c","constructor","__v","__i","__u","vnode","S","children","C","this","context","$","length","I","__P","__d","q","__n","namespaceURI","D","P","base","some","A","push","H","__r","debounceRendering","sort","shift","L","y","T","J","j","nextSibling","String","O","K","insertBefore","nodeType","z","setProperty","test","N","style","cssText","replace","toLowerCase","slice","addEventListener","removeEventListener","removeAttribute","setAttribute","V","event","k","M","prototype","render","contextType","value","__E","Q","sub","state","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","apply","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","E","then","indexOf","B","G","diffed","call","map","localName","document","createTextNode","createElementNS","is","__m","data","childNodes","attributes","name","__html","innerHTML","content","current","unmount","componentWillUnmount","getDerivedStateFromError","setState","componentDidCatch","forceUpdate","Promise","bind","resolve","setTimeout","Math","random","toString","__source","__self","defaultProps","__awaiter","thisArg","_arguments","generator","reject","fulfilled","step","next","rejected","result","done","SuppressedError","__H","__N","__f","filter","every","requestAnimationFrame","clearTimeout","cancelAnimationFrame","Header","version","setVersion","useState","hasUpdate","setHasUpdate","useEffect","req","fetch","lastVersion","json","lastVertionSplitted","split","currentVersionSplitted","minVersionLength","min","parseInt","err","console","error","checkVersion","_jsxs","class","_jsx","src","alt","_Fragment","href","target","rel","__classPrivateFieldSet","receiver","kind","has","TypeError","set","__classPrivateFieldGet","get","uuid4","crypto","globalThis","randomUUID","u8","Uint8Array","randomByte","getRandomValues","isAbortError","message","includes","castToError","Error","Object","cause","stack","JSON","stringify","OpenAIError","APIError","status","headers","super","makeMessage","requestID","code","param","msg","generate","errorResponse","APIConnectionError","BadRequestError","AuthenticationError","PermissionDeniedError","NotFoundError","ConflictError","UnprocessableEntityError","RateLimitError","InternalServerError","APIUserAbortError","undefined","APIConnectionTimeoutError","LengthFinishReasonError","ContentFilterFinishReasonError","InvalidWebhookSignatureError","startsWithSchemeRegexp","val","isReadonlyArray","maybeObj","isObj","obj","sleep","ms","VERSION","getPlatformProperties","detectedPlatform","Deno","build","EdgeRuntime","process","normalizePlatform","os","normalizeArch","arch","deno","platform","browserInfo","navigator","browserPatterns","pattern","match","exec","userAgent","browser","getBrowserInfo","_platformHeaders","makeReadableStream","args","ReadableStream","ReadableStreamFrom","iterable","iter","Symbol","asyncIterator","iterator","start","pull","controller","close","enqueue","cancel","return","ReadableStreamToAsyncIterable","stream","reader","getReader","read","releaseLock","cancelPromise","FallbackEncoder","body","bodyHeaders","default_format","default_formatter","formatters","RFC1738","RFC3986","hasOwn","Function","hasOwnProperty","hex_table","array","toUpperCase","limit","maybe_map","fn","mapped","array_prefix_generators","brackets","prefix","comma","indices","repeat","push_to_array","arr","value_or_array","toISOString","defaults","addQueryPrefix","allowDots","allowEmptyArrays","arrayFormat","charset","charsetSentinel","delimiter","encode","encodeDotInKeys","encoder","str","_defaultEncoder","_kind","format","string","escape","$0","out","segment","charCodeAt","charAt","join","encodeValuesOnly","formatter","serializeDate","date","Date","skipNulls","strictNullHandling","sentinel","inner_stringify","object","generateArrayPrefix","commaRoundTrip","sideChannel","tmp_sc","find_flag","pos","RangeError","is_non_nullish_primitive","isBuffer","is_buffer","key_value","values","obj_keys","keys","encoded_prefix","adjusted_prefix","encoded_key","key_prefix","valueSideChannel","WeakMap","opts","options","normalize_stringify_options","joined","encodeUTF8_","decodeUTF8_","encodeUTF8","TextEncoder","decodeUTF8","bytes","decoder","TextDecoder","decode","_LineDecoder_buffer","_LineDecoder_carriageReturnIndex","LineDecoder","chunk","binaryChunk","ArrayBuffer","buffers","buffer","output","index","concatBytes","lines","patternIndex","findNewlineIndex","carriage","subarray","endIndex","preceding","line","flush","startIndex","findDoubleNewlineIndex","NEWLINE_CHARS","Set","NEWLINE_REGEXP","levelNumbers","off","warn","info","debug","parseLogLevel","maybeLevel","sourceName","client","loggerFor","noop","makeLogFn","fnLevel","logger","logLevel","noopLogger","cachedLoggers","cachedLogger","levelLogger","formatRequestDetails","details","fromEntries","Headers","entries","retryOfRequestLogID","retryOf","_Stream_client","_APIPromise_client","_AbstractPage_client","Stream","fromSSEResponse","response","consumed","async","sse","abort","product","sseDecoder","SSEDecoder","lineDecoder","sseChunk","newData","iterSSEChunks","_iterSSEMessages","startsWith","parse","raw","fromReadableStream","readableStream","iterLines","tee","left","right","teeIterator","queue","toReadableStream","self","ctrl","chunks","endsWith","substring","fieldname","partition","defaultParseResponse","requestLogID","startTime","url","__streamClass","__binaryResponse","contentType","mediaType","trim","addRequestID","text","durationMs","now","defineProperty","enumerable","APIPromise","responsePromise","parseResponse","_thenUnwrap","transform","asResponse","withResponse","all","request_id","parsedPromise","onfulfilled","onrejected","catch","onfinally","finally","AbstractPage","hasNextPage","getPaginatedItems","nextPageRequestOptions","getNextPage","nextOptions","requestAPIList","iterPages","page","item","PagePromise","request","Page","CursorPage","has_more","id","query","after","ConversationCursorPage","last_id","cursor","checkFileSupport","File","isOldNode","versions","node","makeFile","fileBits","fileName","getName","filename","path","pop","isAsyncIterable","multipartFormRequestOptions","createForm","supportsFormDataMap","fetchObject","cached","promise","FetchResponse","Response","FormData","supportsFormData","form","addFormValue","append","blob","Blob","isNamedBlob","entry","prop","isBlobLike","size","arrayBuffer","getBytes","parts","isView","getOwnPropertyNames","propsForError","APIResource","_client","encodeURIPath","encodeURIComponent","EMPTY","freeze","create","createPathTagFunction","pathEncoder","statics","params","postPath","invalidSegments","reduce","previousValue","currentValue","encoded","getPrototypeOf","pathOnly","invalidSegmentPattern","lastEnd","underline","acc","spaces","arrows","list","completionID","getAPIList","isChatCompletionFunctionTool","tool","function","isAutoParsableResponseFormat","response_format","isAutoParsableTool","parseChatCompletion","completion","choices","choice","finish_reason","assertToolCallsAreChatCompletionFunctionToolCalls","tool_calls","toolCall","inputTool","tools","find","parsed_arguments","$parseRaw","arguments","strict","parseToolCall","parsed","refusal","parseResponseFormat","shouldParseToolCall","hasAutoParseableInput","toolCalls","isAssistantMessage","role","isToolMessage","_EventStream_instances","_EventStream_connectedPromise","_EventStream_resolveConnectedPromise","_EventStream_rejectConnectedPromise","_EventStream_endPromise","_EventStream_resolveEndPromise","_EventStream_rejectEndPromise","_EventStream_listeners","_EventStream_ended","_EventStream_errored","_EventStream_aborted","_EventStream_catchingPromiseCreated","_EventStream_handleError","_AbstractChatCompletionRunner_instances","_AbstractChatCompletionRunner_getFinalContent","_AbstractChatCompletionRunner_getFinalMessage","_AbstractChatCompletionRunner_getFinalFunctionToolCall","_AbstractChatCompletionRunner_getFinalFunctionToolCallResult","_AbstractChatCompletionRunner_calculateTotalUsage","_AbstractChatCompletionRunner_validateParams","_AbstractChatCompletionRunner_stringifyFunctionCallResult","EventStream","add","AbortController","_run","executor","_emitFinal","_emit","_connected","ended","errored","aborted","on","listener","listeners","findIndex","splice","once","emitted","forEach","isRunnableFunctionWithParse","WeakSet","openAIError","DEFAULT_MAX_CHAT_COMPLETIONS","AbstractChatCompletionRunner","_chatCompletions","messages","_addChatCompletion","chatCompletion","_addMessage","emit","tool_call","finalChatCompletion","finalContent","finalMessage","finalFunctionToolCall","finalFunctionToolCallResult","totalUsage","allChatCompletions","finalFunctionCall","finalFunctionCallResult","usage","_createChatCompletion","signal","chat","completions","_runChatCompletion","_runTools","tool_choice","restParams","singleFunctionToCall","maxChatCompletions","inputTools","$callback","description","parameters","functionsByName","tool_call_id","rawContent","at","total","completion_tokens","prompt_tokens","total_tokens","ChatCompletionRunner","runTools","runner","Allow","ATOM","PartialJSON","MalformedJSON","_parseJSON","jsonString","allow","markPartialJSON","throwMalformedError","parseAny","skipBlank","parseStr","parseObj","parseArr","Infinity","NaN","parseNum","Number","lastIndexOf","writable","configurable","partialParse","input","allowPartial","parseJSON","_ChatCompletionStream_instances","_ChatCompletionStream_params","_ChatCompletionStream_choiceEventStates","_ChatCompletionStream_currentChatCompletionSnapshot","_ChatCompletionStream_beginRequest","_ChatCompletionStream_getChoiceEventState","_ChatCompletionStream_addChunk","_ChatCompletionStream_emitToolCallDoneEvent","_ChatCompletionStream_emitContentDoneEvents","_ChatCompletionStream_endRequest","_ChatCompletionStream_getAutoParseableResponseFormat","_ChatCompletionStream_accumulateChatCompletion","ChatCompletionStream","currentChatCompletionSnapshot","_fromReadableStream","createChatCompletion","chatId","content_done","refusal_done","logprobs_content_done","logprobs_refusal_done","done_tool_calls","current_tool_call_index","choiceSnapshot","delta","snapshot","logprobs","toolCallDelta","toolCallSnapshot","arguments_delta","toolCallIndex","responseFormat","created","model","system_fingerprint","rest","choiceRest","function_call","messageRest","toolRest","fnRest","maybeParseChatCompletion","finalizeChatCompletion","_a","_b","_c","_d","assign","other","pushQueue","readQueue","ChatCompletionStreamingRunner","MessagesAPI.Messages","post","retrieve","update","delete","validateInputTools","Completions","Messages","Chat","CompletionsAPI.Completions","brand_privateNullableHeaders","iterateHeaders","nulls","shouldClear","row","didClear","buildHeaders","newHeaders","targetHeaders","nullHeaders","seenHeaders","lowerName","Speech","Accept","Transcriptions","__metadata","Translations","Audio","transcriptions","TranscriptionsAPI.Transcriptions","translations","TranslationsAPI.Translations","speech","SpeechAPI.Speech","Batches","batchID","Assistants","assistantID","Sessions","TranscriptionSessions","sessions","SessionsAPI.Sessions","transcriptionSessions","TranscriptionSessionsAPI.TranscriptionSessions","Realtime","threadID","messageID","thread_id","Steps","stepID","run_id","runID","readEnv","env","_AssistantStream_instances","_AssistantStream_events","_AssistantStream_runStepSnapshots","_AssistantStream_messageSnapshots","_AssistantStream_messageSnapshot","_AssistantStream_finalRun","_AssistantStream_currentContentIndex","_AssistantStream_currentContent","_AssistantStream_currentToolCallIndex","_AssistantStream_currentToolCall","_AssistantStream_currentEvent","_AssistantStream_currentRunSnapshot","_AssistantStream_currentRunStepSnapshot","_AssistantStream_addEvent","_AssistantStream_endRequest","_AssistantStream_handleMessage","_AssistantStream_handleRunStep","_AssistantStream_handleEvent","_AssistantStream_accumulateRunStep","_AssistantStream_accumulateMessage","_AssistantStream_accumulateContent","_AssistantStream_handleRun","AssistantStream","_addRun","createToolAssistantStream","runId","runs","_runToolAssistantStream","_createToolAssistantStream","run","submitToolOutputs","createThreadAssistantStream","thread","_threadAssistantStream","createAssistantStream","threadId","_runAssistantStream","currentEvent","currentRun","currentMessageSnapshot","currentRunStepSnapshot","finalRunSteps","finalMessages","finalRun","_createThreadAssistantStream","createAndRun","_createAssistantStream","accumulateDelta","deltaValue","accValue","deltaEntry","accEntry","accumulatedMessage","newContent","snapshotContent","textDelta","image_file","currentContent","accumulatedRunStep","step_details","accumulated","contentElement","steps","StepsAPI.Steps","include","createAndPoll","poll","createAndStream","beta","threads","pollIntervalMs","sleepInterval","headerInterval","headerIntervalMs","isNaN","submitToolOutputsAndPoll","submitToolOutputsStream","Runs","Threads","RunsAPI.Runs","createAndRunPoll","createAndRunStream","Beta","realtime","RealtimeAPI.Realtime","assistants","AssistantsAPI.Assistants","ThreadsAPI.Threads","Content","fileID","container_id","ContentAPI.Content","containerID","Files","Containers","files","FilesAPI.Files","Items","conversationID","itemID","conversation_id","Conversations","items","ItemsAPI.Items","Embeddings","hasUserProvidedEncodingFormat","encoding_format","embeddingBase64Obj","embeddingBase64Str","embedding","base64Str","Buffer","buf","from","Float32Array","byteOffset","BYTES_PER_ELEMENT","binaryStr","atob","len","toFloat32Array","OutputItems","outputItemID","eval_id","outputItems","OutputItemsAPI.OutputItems","evalID","Evals","waitForProcessing","pollInterval","maxWait","TERMINAL_STATES","file","Methods","validate","Alpha","graders","GradersAPI.Graders","Graders","Permissions","fineTunedModelCheckpoint","method","permissionID","fine_tuned_model_checkpoint","permissions","PermissionsAPI.Permissions","Checkpoints","fineTuningJobID","Jobs","checkpoints","CheckpointsAPI.Checkpoints","listEvents","pause","resume","FineTuning","methods","MethodsAPI.Methods","jobs","JobsAPI.Jobs","alpha","AlphaAPI.Alpha","GraderModels","graderModels","GraderModelsAPI.GraderModels","Images","createVariation","edit","Models","Moderations","ClientSecrets","clientSecrets","ClientSecretsAPI.ClientSecrets","maybeParseResponse","output_parsed","parseTextFormat","getOwnPropertyDescriptor","addOutputText","text_format","input_tools","rsp","texts","output_text","_ResponseStream_instances","_ResponseStream_params","_ResponseStream_currentResponseSnapshot","_ResponseStream_finalResponse","_ResponseStream_beginRequest","_ResponseStream_addEvent","_ResponseStream_endRequest","_ResponseStream_accumulateResponse","ResponseStream","createResponse","_createOrRetrieveResponse","starting_after","responses","response_id","maybeEmit","sequence_number","output_index","content_index","parsedResponse","finalizeResponse","part","finalResponse","InputItems","responseID","Responses","inputItems","InputItemsAPI.InputItems","Parts","uploadID","Uploads","PartsAPI.Parts","complete","FileBatches","vectorStoreID","vector_store_id","vectorStoreId","batch","listFiles","uploadAndPoll","fileIds","configuredConcurrency","maxConcurrency","concurrencyLimit","fileIterator","allFileIds","workers","fill","fileObj","purpose","promises","results","allSettled","reason","allSettledWithThrow","file_ids","fileResponse","upload","fileInfo","file_id","VectorStores","fileBatches","FileBatchesAPI.FileBatches","search","_Webhooks_instances","_Webhooks_validateSecret","_Webhooks_getRequiredHeader","_OpenAI_instances","_OpenAI_encoder","_OpenAI_baseURLOverridden","Webhooks","unwrap","payload","secret","webhookSecret","tolerance","verifySignature","subtle","importKey","verify","headersObj","signatureHeader","timestamp","webhookId","timestampSeconds","nowSeconds","floor","signatures","decodedSecret","signedPayload","hash","signature","signatureBytes","OpenAI","baseURL","apiKey","organization","project","API.Completions","API.Chat","embeddings","API.Embeddings","API.Files","images","API.Images","audio","API.Audio","moderations","API.Moderations","models","API.Models","fineTuning","API.FineTuning","API.Graders","vectorStores","API.VectorStores","webhooks","API.Webhooks","API.Beta","batches","API.Batches","uploads","API.Uploads","API.Responses","API.Realtime","conversations","API.Conversations","evals","API.Evals","containers","API.Containers","Errors.OpenAIError","dangerouslyAllowBrowser","window","timeout","DEFAULT_TIMEOUT","defaultLogLevel","fetchOptions","maxRetries","Shims.getDefaultFetch","Opts.FallbackEncoder","_options","withOptions","defaultQuery","validateHeaders","authHeaders","Authorization","stringifyQuery","qs.stringify","getUserAgent","defaultIdempotencyKey","makeStatusError","Errors.APIError","_callApiKey","token","buildURL","defaultBaseURL","isAbsoluteURL","URL","_k","isEmptyObj","prepareOptions","prepareRequest","methodRequest","patch","put","remainingRetries","makeRequest","optionsInput","retriesRemaining","buildRequest","retryCount","padStart","retryLogStr","Errors.APIUserAbortError","fetchWithTimeout","headersTime","retryMessage","isTimeout","retryRequest","Errors.APIConnectionTimeoutError","Errors.APIConnectionError","responseInfo","ok","shouldRetry","Shims.CancelReadableStream","errText","errJSON","safeJSON","errMessage","Pagination.PagePromise","init","isReadableBody","duplex","shouldRetryHeader","responseHeaders","timeoutMillis","retryAfterMillisHeader","timeoutMs","parseFloat","retryAfterHeader","timeoutSeconds","calculateDefaultRetryTimeoutMillis","numRetries","pow","inputOptions","isInteger","validatePositiveInteger","buildBody","idempotencyHeaders","idempotencyHeader","idempotencyKey","trunc","defaultHeaders","rawHeaders","DataView","URLSearchParams","Shims.ReadableStreamFrom","useModel","projectId","setModels","setError","fetchModels","filteredModels","localeCompare","validateModel","maxTokens","success","max_completion_tokens","json_schema","schema","properties","reply","number","required","additionalProperties","isCurrentVersionSupportingImages","versionNumber","SettingsPanel","config","onChange","showMessage","visible","testing","setTesting","htmlFor","placeholder","onInput","onFocus","onClick","title","AdvancedSettingsPanel","timeoutValue","OptionsGrid","toggleRow","label","checked","isClipboard","mode","OperatingMode","Errors.NotFoundError","Errors.ConflictError","Errors.RateLimitError","Errors.BadRequestError","Errors.AuthenticationError","Errors.InternalServerError","Errors.PermissionDeniedError","Errors.UnprocessableEntityError","Errors.InvalidWebhookSignatureError","toFile","lastModified","isFileLike","isResponseLike","pathname","UploadsAPIUploads","root","getElementById","documentElement","firstChild","loading","saveConfig","setConfig","setLoading","chrome","storage","sync","moodleGPT","prev","newConfig","updated","useConfig","showAdvanced","setShowAdvanced","setMessage","handleConfigChange","isError","preventDefault"],"mappings":"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","x_google_ignoreList":[0,1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96]} \ No newline at end of file diff --git a/extension/popup/style.css b/extension/popup/style.css index a28af50..f3fabe2 100644 --- a/extension/popup/style.css +++ b/extension/popup/style.css @@ -1,218 +1,564 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap'); - -:root { - --bg-color: #0b0f19; - --panel-bg: rgba(255, 255, 255, 0.05); - --color: #e2e8f0; - --color-muted: #94a3b8; - --btn-color: #8a2be2; - --btn-hover: #9d4edd; - --accent: #00f0ff; - --border-color: rgba(255, 255, 255, 0.1); - --font-family: 'Inter', sans-serif; +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; } -* { +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +/* +! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { box-sizing: border-box; - padding: 0; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: #e5e7eb; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { margin: 0; - font-family: var(--font-family); - color: var(--color); + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden]:where(:not([hidden="until-found"])) { + display: none; } body { width: 380px; - min-height: 100vh; - background-color: var(--bg-color); - background-image: - radial-gradient(circle at top right, rgba(138, 43, 226, 0.15), transparent 60%), - radial-gradient(circle at bottom left, rgba(0, 240, 255, 0.15), transparent 60%); - display: flex; - justify-content: center; - align-items: flex-start; + min-height: 500px; } -main { - display: flex; - flex-direction: column; - padding: 1.5rem; - gap: 1rem; - width: 100%; -} - -/* Header */ -.header { - display: flex; - align-items: center; - gap: 1rem; - margin-bottom: 0.5rem; -} - -.header img { - width: 3.5rem; - filter: drop-shadow(0 0 8px rgba(0, 240, 255, 0.5)); -} - -.header-text h1 { - font-size: 1.5rem; - font-weight: 600; - background: linear-gradient(90deg, #00f0ff, #8a2be2); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; -} - -#version { - font-size: 0.8rem; - color: var(--color-muted); -} - -/* Panels */ -.panel { - background: var(--panel-bg); - border: 1px solid var(--border-color); - border-radius: 12px; - padding: 1rem; - backdrop-filter: blur(10px); - display: flex; - flex-direction: column; - gap: 0.8rem; -} - -/* Form Groups */ -.form-group { - display: flex; - flex-direction: column; - gap: 0.3rem; - text-align: left; -} - -.form-group label { - font-size: 0.8rem; - color: var(--color-muted); - text-transform: uppercase; - letter-spacing: 0.5px; -} - -.form-group label .required { - color: var(--accent); - margin-left: 2px; -} - -.input-with-icon { - display: flex; - align-items: center; - gap: 0.5rem; -} - -.input-with-icon input { - flex: 1; -} - -.input-with-icon i { - color: var(--accent); - cursor: pointer; - transition: transform 0.2s; -} - -.input-with-icon i:hover { - transform: scale(1.1); -} - -input[type='text'], -input[type='password'], -input[type='number'] { - width: 100%; - background: rgba(0, 0, 0, 0.3); - border: 1px solid var(--border-color); - padding: 0.6rem; - border-radius: 6px; - outline: none; - transition: - border-color 0.2s, - box-shadow 0.2s; -} - -input[type='text']:focus, -input[type='password']:focus, -input[type='number']:focus { - border-color: var(--accent); - box-shadow: 0 0 0 2px rgba(0, 240, 255, 0.2); -} - -#switch-settings { - font-size: 0.8rem; - color: var(--color-muted); - text-decoration: none; - text-align: center; - display: block; - transition: color 0.2s; -} - -#switch-settings:hover { - color: var(--accent); -} - -/* Mode Buttons */ -.section-title { - display: flex; - align-items: center; - gap: 0.5rem; - font-size: 0.9rem; - font-weight: 500; - margin-top: 0.5rem; -} - -.section-title i { - color: var(--btn-color); -} - -#mode { - display: flex; - gap: 0.5rem; - list-style: none; -} - -#mode li { - flex: 1; -} - -#mode button { - width: 100%; - background-color: transparent; - border: 1px solid var(--btn-color); - color: var(--color); - padding: 0.5rem; - border-radius: 6px; - cursor: pointer; - text-transform: uppercase; - font-size: 0.8rem; - transition: all 0.2s; -} - -#mode button:not(.not-selected) { - background-color: var(--btn-color); - box-shadow: 0 0 10px rgba(138, 43, 226, 0.4); -} - -/* Toggle Switches for Options */ -.options-grid { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.8rem; -} - -.toggle-row { - display: flex; - align-items: center; - justify-content: space-between; -} - -.toggle-row label { - font-size: 0.85rem; - cursor: pointer; -} - -/* Custom Checkbox as Toggle */ .toggle-switch { position: relative; display: inline-block; @@ -233,8 +579,9 @@ input[type='number']:focus { left: 0; right: 0; bottom: 0; - background-color: rgba(255, 255, 255, 0.1); - transition: 0.3s; + background-color: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.15); + transition: 0.4s; border-radius: 20px; } @@ -243,70 +590,502 @@ input[type='number']:focus { content: ''; height: 14px; width: 14px; - left: 3px; - bottom: 3px; - background-color: white; - transition: 0.3s; + left: 2px; + bottom: 2px; + background-color: #94a3b8; + transition: 0.4s; border-radius: 50%; } input:checked + .slider { - background-color: var(--accent); - box-shadow: 0 0 8px var(--accent); + background-color: #6366f1; + border-color: #6366f1; } input:checked + .slider:before { transform: translateX(16px); + background-color: white; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); } -/* Actions */ -.save { - background: linear-gradient(90deg, var(--btn-color), var(--accent)); - border: none; - padding: 0.8rem; - border-radius: 8px; - color: #fff; - font-weight: 600; - font-size: 1rem; - cursor: pointer; - width: 100%; - transition: - transform 0.2s, - box-shadow 0.2s; +.\!visible { + visibility: visible !important; } -.save:hover { - transform: translateY(-2px); - box-shadow: 0 4px 15px rgba(138, 43, 226, 0.5); +.visible { + visibility: visible; } -#message { - display: none; - font-size: 0.85rem; - text-align: center; - color: var(--accent); +.absolute { + position: absolute; } -/* Footer Links */ -.footer { - display: flex; - justify-content: center; - gap: 1rem; +.relative { + position: relative; +} + +.right-3 { + right: 0.75rem; +} + +.m-0 { + margin: 0px; +} + +.my-2 { + margin-top: 0.5rem; + margin-bottom: 0.5rem; +} + +.mb-2 { + margin-bottom: 0.5rem; +} + +.mb-4 { + margin-bottom: 1rem; +} + +.ml-1 { + margin-left: 0.25rem; +} + +.mt-1 { + margin-top: 0.25rem; +} + +.mt-2 { margin-top: 0.5rem; } -.footer a { - font-size: 0.8rem; - color: var(--color-muted); - text-decoration: none; - transition: color 0.2s; +.box-border { + box-sizing: border-box; } -.footer a:hover { - color: var(--accent); +.block { + display: block; } -.donate { - color: var(--accent) !important; - font-weight: bold; +.flex { + display: flex; +} + +.grid { + display: grid; +} + +.h-12 { + height: 3rem; +} + +.min-h-\[18px\] { + min-height: 18px; +} + +.min-h-screen { + min-height: 100vh; +} + +.w-12 { + width: 3rem; +} + +.w-full { + width: 100%; +} + +.flex-1 { + flex: 1 1 0%; +} + +@keyframes float { + 0%, 100% { + transform: translateY(0); + } + + 50% { + transform: translateY(-4px); + } +} + +.animate-float { + animation: float 3s ease-in-out infinite; +} + +.cursor-pointer { + cursor: pointer; +} + +.list-none { + list-style-type: none; +} + +.grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.flex-col { + flex-direction: column; +} + +.items-center { + align-items: center; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.gap-2 { + gap: 0.5rem; +} + +.gap-4 { + gap: 1rem; +} + +.gap-5 { + gap: 1.25rem; +} + +.gap-6 { + gap: 1.5rem; +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-x-hidden { + overflow-x: hidden; +} + +.rounded-2xl { + border-radius: 1rem; +} + +.rounded-lg { + border-radius: 0.5rem; +} + +.rounded-xl { + border-radius: 0.75rem; +} + +.border { + border-width: 1px; +} + +.border-none { + border-style: none; +} + +.border-input-border { + border-color: rgba(255, 255, 255, 0.15); +} + +.border-panel-border { + border-color: rgba(255, 255, 255, 0.1); +} + +.bg-input-bg { + background-color: rgba(0, 0, 0, 0.2); +} + +.bg-panel-bg { + background-color: rgba(255, 255, 255, 0.05); +} + +.bg-primary { + --tw-bg-opacity: 1; + background-color: rgb(99 102 241 / var(--tw-bg-opacity, 1)); +} + +.bg-transparent { + background-color: transparent; +} + +.bg-gradient-to-br { + background-image: linear-gradient(to bottom right, var(--tw-gradient-stops)); +} + +.bg-gradient-to-r { + background-image: linear-gradient(to right, var(--tw-gradient-stops)); +} + +.from-gradient-start { + --tw-gradient-from: #0f172a var(--tw-gradient-from-position); + --tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-indigo-300 { + --tw-gradient-from: #a5b4fc var(--tw-gradient-from-position); + --tw-gradient-to: rgb(165 180 252 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.from-primary { + --tw-gradient-from: #6366f1 var(--tw-gradient-from-position); + --tw-gradient-to: rgb(99 102 241 / 0) var(--tw-gradient-to-position); + --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to); +} + +.to-gradient-end { + --tw-gradient-to: #1e1b4b var(--tw-gradient-to-position); +} + +.to-indigo-400 { + --tw-gradient-to: #818cf8 var(--tw-gradient-to-position); +} + +.to-primary-hover { + --tw-gradient-to: #4f46e5 var(--tw-gradient-to-position); +} + +.bg-clip-text { + -webkit-background-clip: text; + background-clip: text; +} + +.p-0 { + padding: 0px; +} + +.p-2\.5 { + padding: 0.625rem; +} + +.p-3 { + padding: 0.75rem; +} + +.p-4 { + padding: 1rem; +} + +.p-6 { + padding: 1.5rem; +} + +.px-3 { + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.py-2\.5 { + padding-top: 0.625rem; + padding-bottom: 0.625rem; +} + +.pl-3 { + padding-left: 0.75rem; +} + +.pr-9 { + padding-right: 2.25rem; +} + +.text-center { + text-align: center; +} + +.font-sans { + font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif; +} + +.text-2xl { + font-size: 1.5rem; + line-height: 2rem; +} + +.text-base { + font-size: 1rem; + line-height: 1.5rem; +} + +.text-sm { + font-size: 0.875rem; + line-height: 1.25rem; +} + +.text-xs { + font-size: 0.75rem; + line-height: 1rem; +} + +.font-bold { + font-weight: 700; +} + +.font-medium { + font-weight: 500; +} + +.font-semibold { + font-weight: 600; +} + +.text-amber-400 { + --tw-text-opacity: 1; + color: rgb(251 191 36 / var(--tw-text-opacity, 1)); +} + +.text-error { + --tw-text-opacity: 1; + color: rgb(239 68 68 / var(--tw-text-opacity, 1)); +} + +.text-primary { + --tw-text-opacity: 1; + color: rgb(99 102 241 / var(--tw-text-opacity, 1)); +} + +.text-sky-400 { + --tw-text-opacity: 1; + color: rgb(56 189 248 / var(--tw-text-opacity, 1)); +} + +.text-success { + --tw-text-opacity: 1; + color: rgb(16 185 129 / var(--tw-text-opacity, 1)); +} + +.text-text-primary { + --tw-text-opacity: 1; + color: rgb(248 250 252 / var(--tw-text-opacity, 1)); +} + +.text-text-secondary { + --tw-text-opacity: 1; + color: rgb(148 163 184 / var(--tw-text-opacity, 1)); +} + +.text-transparent { + color: transparent; +} + +.text-white { + --tw-text-opacity: 1; + color: rgb(255 255 255 / var(--tw-text-opacity, 1)); +} + +.no-underline { + text-decoration-line: none; +} + +.antialiased { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.shadow-\[0_2px_8px_rgba\(99\2c 102\2c 241\2c 0\.4\)\] { + --tw-shadow: 0 2px 8px rgba(99,102,241,0.4); + --tw-shadow-colored: 0 2px 8px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.shadow-\[0_8px_32px_0_rgba\(0\2c 0\2c 0\2c 0\.3\)\] { + --tw-shadow: 0 8px 32px 0 rgba(0,0,0,0.3); + --tw-shadow-colored: 0 8px 32px 0 var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.drop-shadow-md { + --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06)); + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.filter { + filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow); +} + +.backdrop-blur-md { + --tw-backdrop-blur: blur(12px); + backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia); +} + +.transition-all { + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.transition-colors { + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.duration-300 { + transition-duration: 300ms; +} + +.hover\:-translate-y-0\.5:hover { + --tw-translate-y: -0.125rem; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:scale-110:hover { + --tw-scale-x: 1.1; + --tw-scale-y: 1.1; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); +} + +.hover\:bg-white\/5:hover { + background-color: rgb(255 255 255 / 0.05); +} + +.hover\:text-amber-300:hover { + --tw-text-opacity: 1; + color: rgb(252 211 77 / var(--tw-text-opacity, 1)); +} + +.hover\:text-primary-hover:hover { + --tw-text-opacity: 1; + color: rgb(79 70 229 / var(--tw-text-opacity, 1)); +} + +.hover\:text-sky-300:hover { + --tw-text-opacity: 1; + color: rgb(125 211 252 / var(--tw-text-opacity, 1)); +} + +.hover\:text-text-primary:hover { + --tw-text-opacity: 1; + color: rgb(248 250 252 / var(--tw-text-opacity, 1)); +} + +.hover\:shadow-\[0_4px_12px_rgba\(99\2c 102\2c 241\2c 0\.4\)\]:hover { + --tw-shadow: 0 4px 12px rgba(99,102,241,0.4); + --tw-shadow-colored: 0 4px 12px var(--tw-shadow-color); + box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow); +} + +.focus\:border-input-focus:focus { + --tw-border-opacity: 1; + border-color: rgb(129 140 248 / var(--tw-border-opacity, 1)); +} + +.focus\:outline-none:focus { + outline: 2px solid transparent; + outline-offset: 2px; +} + +.focus\:ring-2:focus { + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000); +} + +.focus\:ring-primary\/20:focus { + --tw-ring-color: rgb(99 102 241 / 0.2); +} + +.active\:translate-y-0:active { + --tw-translate-y: 0px; + transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } diff --git a/package-lock.json b/package-lock.json index 8cc4fd4..9db7c8e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,26 +8,46 @@ "name": "sparkassist", "version": "2.0.0", "license": "MIT", + "dependencies": { + "preact": "^10.29.1" + }, "devDependencies": { "@eslint/js": "^9.32.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.4", "@types/chrome": "^0.1.1", "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.26.1", "@typescript-eslint/parser": "^8.38.0", + "autoprefixer": "^10.5.0", "eslint": "^9.32.0", "eslint-config-prettier": "^10.1.8", "openai": "^5.23.2", + "postcss": "^8.5.14", "prettier": "^3.6.2", "rollup": "^4.46.2", "rollup-plugin-ts": "^3.2.0", + "tailwindcss": "^3.4.19", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -414,6 +434,28 @@ } } }, + "node_modules/@rollup/plugin-replace": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz", + "integrity": "sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-terser": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", @@ -1163,6 +1205,47 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1170,12 +1253,75 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.27", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.27.tgz", + "integrity": "sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -1199,9 +1345,9 @@ } }, "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -1217,11 +1363,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1274,10 +1422,20 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/caniuse-lite": { - "version": "1.0.30001706", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001706.tgz", - "integrity": "sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==", + "version": "1.0.30001791", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz", + "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==", "dev": true, "funding": [ { @@ -1292,7 +1450,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.2", @@ -1310,6 +1469,44 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1393,6 +1590,19 @@ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "dev": true }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -1425,17 +1635,33 @@ "node": ">=0.10.0" } }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/electron-to-chromium": { - "version": "1.5.120", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.120.tgz", - "integrity": "sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==", - "dev": true + "version": "1.5.349", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.349.tgz", + "integrity": "sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A==", + "dev": true, + "license": "ISC" }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1732,10 +1958,14 @@ } }, "node_modules/fdir": { - "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -1804,6 +2034,20 @@ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true }, + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1924,6 +2168,19 @@ "node": ">=0.8.19" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -1999,6 +2256,16 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2053,6 +2320,26 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2138,6 +2425,37 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2145,10 +2463,41 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } }, "node_modules/object-path": { "version": "0.11.8", @@ -2272,10 +2621,11 @@ "dev": true }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2283,6 +2633,199 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/preact": { + "version": "10.29.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.1.tgz", + "integrity": "sha512-gQCLc/vWroE8lIpleXtdJhTFDogTdZG9AjMUpVkDf2iTCNwYNWA+u16dL41TqUDJO4gm2IgrcMv3uTpjd4Pwmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2347,6 +2890,42 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -2590,6 +3169,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -2613,6 +3202,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2637,6 +3259,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/terser": { "version": "5.39.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", @@ -2655,6 +3315,46 @@ "node": ">=10" } }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2699,6 +3399,13 @@ "typescript": "^3.x || ^4.x || ^5.x" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -2789,9 +3496,9 @@ "license": "MIT" }, "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -2807,6 +3514,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -2828,6 +3536,13 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 2827ff4..699d6f4 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,10 @@ "version": "2.0.0", "description": "An AI study assistant for your quizzes.", "scripts": { - "build": "npm run prettier && npm run lint && npm run fastBuild", + "build": "npm run prettier && npm run lint && npm run build:css && npm run fastBuild", + "build:css": "tailwindcss -i ./src/popup/style.css -o ./extension/popup/style.css", "fastBuild": "rollup -c", - "lint": "eslint . --ext .ts", + "lint": "eslint . --ext .ts,.tsx", "prettier": "prettier --write ." }, "repository": { @@ -29,19 +30,26 @@ "@eslint/js": "^9.32.0", "@rollup/plugin-commonjs": "^28.0.6", "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.1.4", "@types/chrome": "^0.1.1", "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.26.1", "@typescript-eslint/parser": "^8.38.0", + "autoprefixer": "^10.5.0", "eslint": "^9.32.0", "eslint-config-prettier": "^10.1.8", "openai": "^5.23.2", + "postcss": "^8.5.14", "prettier": "^3.6.2", "rollup": "^4.46.2", "rollup-plugin-ts": "^3.2.0", + "tailwindcss": "^3.4.19", "typescript": "^5.8.3", "typescript-eslint": "^8.38.0" + }, + "dependencies": { + "preact": "^10.29.1" } } diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..5cbc2c7 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {} + } +}; diff --git a/rollup.config.js b/rollup.config.js index 656b36b..9d51ce8 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,7 +1,7 @@ const ts = require('@rollup/plugin-typescript'); const terser = require('@rollup/plugin-terser'); const { nodeResolve } = require('@rollup/plugin-node-resolve'); - +const replace = require('@rollup/plugin-replace'); const config = require('./tsconfig.json'); module.exports = [ @@ -17,13 +17,21 @@ module.exports = [ }, { - input: './src/popup/index.ts', + input: './src/popup/index.tsx', output: { file: './extension/popup/popup.js', format: 'umd', sourcemap: true }, onwarn() {}, - plugins: [nodeResolve(), ts(config), terser()] + plugins: [ + replace({ + 'process.env.NODE_ENV': JSON.stringify('production'), + preventAssignment: true + }), + nodeResolve(), + ts(config), + terser() + ] } ]; diff --git a/src/popup/components/AdvancedSettingsPanel.tsx b/src/popup/components/AdvancedSettingsPanel.tsx new file mode 100644 index 0000000..f25b41d --- /dev/null +++ b/src/popup/components/AdvancedSettingsPanel.tsx @@ -0,0 +1,89 @@ +import { MoodleGPTConfig } from '../hooks/useConfig'; + +interface Props { + config: MoodleGPTConfig; + onChange: (key: keyof MoodleGPTConfig, value: MoodleGPTConfig[keyof MoodleGPTConfig]) => void; + visible: boolean; +} + +export function AdvancedSettingsPanel({ config, onChange, visible }: Props) { + if (!visible) return null; + + return ( +
    +
    + + onChange('code', (e.target as HTMLInputElement).value)} + /> +
    +
    + + onChange('baseURL', (e.target as HTMLInputElement).value)} + /> +
    +
    + + onChange('projectId', (e.target as HTMLInputElement).value)} + /> +
    +
    + + { + const val = (e.target as HTMLInputElement).value; + onChange('maxTokens', val ? parseInt(val) : undefined); + }} + /> +
    +
    + + { + const val = (e.target as HTMLInputElement).value; + onChange('timeoutValue', val ? parseInt(val) : undefined); + }} + /> +
    +
    + ); +} diff --git a/src/popup/components/App.tsx b/src/popup/components/App.tsx new file mode 100644 index 0000000..babeb93 --- /dev/null +++ b/src/popup/components/App.tsx @@ -0,0 +1,112 @@ +import { useState } from 'preact/hooks'; +import { Header } from './Header'; +import { SettingsPanel } from './SettingsPanel'; +import { AdvancedSettingsPanel } from './AdvancedSettingsPanel'; +import { OptionsGrid } from './OptionsGrid'; +import { OperatingMode } from './OperatingMode'; +import { useConfig, MoodleGPTConfig } from '../hooks/useConfig'; + +export function App() { + const { config, loading, saveConfig, setConfig } = useConfig(); + const [showAdvanced, setShowAdvanced] = useState(false); + const [message, setMessage] = useState<{ text: string; isError: boolean } | null>(null); + + if (loading) return null; + + const handleConfigChange = ( + key: keyof MoodleGPTConfig, + value: MoodleGPTConfig[keyof MoodleGPTConfig] + ) => { + setConfig(prev => ({ ...prev, [key]: value })); + }; + + const showMessage = (msg: string, isError = false) => { + setMessage({ text: msg, isError }); + setTimeout(() => setMessage(null), 5000); + }; + + const handleSave = async () => { + if (!config.apiKey || !config.model) { + showMessage('Please complete all the form', true); + return; + } + if (config.code && config.code.length > 0 && config.code.length < 2) { + showMessage('The code should at least contain 2 characters', true); + return; + } + await saveConfig(config); + showMessage('Configuration saved'); + }; + + return ( +
    +
    + + + + + + { + e.preventDefault(); + setShowAdvanced(!showAdvanced); + }} + > + {showAdvanced ? 'Go back to settings' : 'Show Advanced Settings'} + + + handleConfigChange('mode', m)} + /> + +
    + + Options +
    + + + + {message && ( +

    + {message.text} +

    + )} + + + + +
    + ); +} diff --git a/src/popup/components/Header.tsx b/src/popup/components/Header.tsx new file mode 100644 index 0000000..d92dd55 --- /dev/null +++ b/src/popup/components/Header.tsx @@ -0,0 +1,70 @@ +import { useEffect, useState } from 'preact/hooks'; + +export function Header() { + const [version, setVersion] = useState('2.0.0'); + const [hasUpdate, setHasUpdate] = useState(false); + + useEffect(() => { + const checkVersion = async () => { + try { + const req = await fetch( + 'https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json' + ); + const rep = await req.json(); + const lastVersion = rep.version; + + const lastVertionSplitted = lastVersion.split('.'); + const currentVersionSplitted = version.split('.'); + const minVersionLength = Math.min( + lastVertionSplitted.length, + currentVersionSplitted.length + ); + + for (let i = 0; i < minVersionLength; ++i) { + if (parseInt(lastVertionSplitted[i]) > parseInt(currentVersionSplitted[i])) { + setVersion(lastVersion); + setHasUpdate(true); + return; + } else if (parseInt(currentVersionSplitted[i]) > parseInt(lastVertionSplitted[i])) { + return; + } + } + } catch (err) { + console.error(err); + } + }; + checkVersion(); + }, []); + + return ( +
    + SparkAssist Logo +
    +

    + SparkAssist +

    +

    + {hasUpdate ? ( + <> + + v{version} + {' '} + is now available ! + + ) : ( + `v${version}` + )} +

    +
    +
    + ); +} diff --git a/src/popup/components/OperatingMode.tsx b/src/popup/components/OperatingMode.tsx new file mode 100644 index 0000000..375bade --- /dev/null +++ b/src/popup/components/OperatingMode.tsx @@ -0,0 +1,46 @@ +interface Props { + mode: 'autocomplete' | 'clipboard'; + onChange: (mode: 'autocomplete' | 'clipboard') => void; +} + +export function OperatingMode({ mode, onChange }: Props) { + return ( + <> +
    + + Operating Mode +
    +
      +
    • + +
    • +
    • + +
    • +
    + + ); +} diff --git a/src/popup/components/OptionsGrid.tsx b/src/popup/components/OptionsGrid.tsx new file mode 100644 index 0000000..c3a54d0 --- /dev/null +++ b/src/popup/components/OptionsGrid.tsx @@ -0,0 +1,47 @@ +import { MoodleGPTConfig } from '../hooks/useConfig'; +import { useModel } from '../hooks/useModel'; + +interface Props { + config: MoodleGPTConfig; + onChange: (key: keyof MoodleGPTConfig, value: MoodleGPTConfig[keyof MoodleGPTConfig]) => void; +} + +export function OptionsGrid({ config, onChange }: Props) { + const { isCurrentVersionSupportingImages } = useModel(); + + const toggleRow = (id: keyof MoodleGPTConfig, label: string, visible = true) => { + if (!visible) return null; + return ( +
    + + +
    + ); + }; + + const isClipboard = config.mode === 'clipboard'; + + return ( +
    + {toggleRow('logs', 'Console logs')} + {toggleRow('title', 'Title hint')} + {toggleRow('cursor', 'Cursor hint')} + {toggleRow('timeout', 'Timeout')} + {toggleRow('typing', 'Typing effect', !isClipboard)} + {toggleRow('mouseover', 'Hover effect', !isClipboard)} + {toggleRow('infinite', 'Infinite try')} + {toggleRow('history', 'History')} + {toggleRow('includeImages', 'Images (GPT-4)', isCurrentVersionSupportingImages(config.model))} +
    + ); +} diff --git a/src/popup/components/SettingsPanel.tsx b/src/popup/components/SettingsPanel.tsx new file mode 100644 index 0000000..6acc4c3 --- /dev/null +++ b/src/popup/components/SettingsPanel.tsx @@ -0,0 +1,86 @@ +import { useModel } from '../hooks/useModel'; +import { MoodleGPTConfig } from '../hooks/useConfig'; +import { useState } from 'preact/hooks'; + +interface Props { + config: MoodleGPTConfig; + onChange: (key: keyof MoodleGPTConfig, value: MoodleGPTConfig[keyof MoodleGPTConfig]) => void; + showMessage: (msg: string, isError?: boolean) => void; + visible: boolean; +} + +export function SettingsPanel({ config, onChange, showMessage, visible }: Props) { + if (!visible) return null; + const { models, fetchModels, validateModel } = useModel( + config.apiKey, + config.baseURL, + config.projectId + ); + const [testing, setTesting] = useState(false); + + const handleTest = async () => { + if (!config.model) { + showMessage('Please select a model first', true); + return; + } + setTesting(true); + showMessage('Checking GPT version...', false); + const result = await validateModel(config.model, config.maxTokens); + setTesting(false); + if (result.success) { + showMessage(result.message || 'Valid model'); + } else { + showMessage(result.error || 'Invalid model', true); + } + }; + + return ( +
    +
    + + onChange('apiKey', (e.target as HTMLInputElement).value)} + /> +
    +
    + +
    + onChange('model', (e.target as HTMLInputElement).value)} + onFocus={fetchModels} + /> + + {models.map(m => ( + + ))} + + +
    +
    +
    + ); +} diff --git a/src/popup/data.ts b/src/popup/data.ts deleted file mode 100644 index fe37a33..0000000 --- a/src/popup/data.ts +++ /dev/null @@ -1,15 +0,0 @@ -export const globalData = { actualMode: 'autocomplete' }; - -export const inputsCheckbox = [ - 'logs', - 'title', - 'cursor', - 'typing', - 'mouseover', - 'infinite', - 'timeout', - 'history', - 'includeImages' -]; -export const mode = document.querySelector('#mode')!; -export const modes = mode.querySelectorAll('button')!; diff --git a/src/popup/gpt-version.ts b/src/popup/gpt-version.ts deleted file mode 100644 index 16dd610..0000000 --- a/src/popup/gpt-version.ts +++ /dev/null @@ -1,142 +0,0 @@ -import OpenAI from 'openai'; -import { isCurrentVersionSupportingImages, showMessage } from './utils'; - -const apiKeySelector: HTMLInputElement = document.querySelector('#apiKey')!; -const inputModel: HTMLInputElement = document.querySelector('#model')!; -const modelsList: HTMLElement = document.querySelector('#models')!; -const imagesIntegrationLine: HTMLInputElement = document.querySelector('#includeImages-line')!; -const baseURLSelector: HTMLInputElement = document.querySelector('#baseURL')!; -const projectIdSelector: HTMLInputElement = document.querySelector('#projectId')!; -const maxTokensSelector: HTMLInputElement = document.querySelector('#maxTokens')!; -/** - * Check if the gpt version is at least 4 to show the option 'Include images' - */ -export function checkCanIncludeImages() { - const version = inputModel.value; - if (isCurrentVersionSupportingImages(version)) { - imagesIntegrationLine.style.display = 'flex'; - } else { - imagesIntegrationLine.style.display = 'none'; - } -} - -inputModel.addEventListener('input', checkCanIncludeImages); - -// We populate the datalist of the chatgpt model -export async function populateDatalistWithGptVersions() { - const apiKey = apiKeySelector.value?.trim(); - const baseURL = baseURLSelector.value?.trim(); - const projectId = projectIdSelector.value?.trim(); - - if (!apiKey) return; - - inputModel.innerHTML = ''; - - try { - const client = new OpenAI({ - apiKey, - baseURL, - project: projectId, - dangerouslyAllowBrowser: true - }); - - const rep = await client.models.list(); - - const models = rep.data.filter( - model => - model.id.startsWith('gpt') || - model.id.search(/^o\d+/gi) !== -1 || - model.id.startsWith('chatgpt') - ); - models.sort((a, b) => b.id.localeCompare(a.id)); // we sort the model to get the best chatgpt version first - - for (const model of models) { - const opt = document.createElement('option'); - opt.value = model.id; - opt.textContent = model.id; - modelsList.appendChild(opt); - } - - checkCanIncludeImages(); - } catch (err: any) { - console.error(err); - showMessage({ msg: err, isError: true }); - } -} - -inputModel.addEventListener('focus', populateDatalistWithGptVersions); - -export async function checkModel() { - const model = inputModel.value?.trim(); - const apiKey = apiKeySelector.value?.trim(); - const baseURL = baseURLSelector.value?.trim(); - const projectId = projectIdSelector.value?.trim(); - const maxTokens = maxTokensSelector.value ? parseInt(maxTokensSelector.value) : undefined; - - try { - showMessage({ msg: 'Checking GPT version...', isInfinite: true, isError: false }); - const client = new OpenAI({ - apiKey, - baseURL, - project: projectId, - dangerouslyAllowBrowser: true - }); - const completion = await client.chat.completions.create({ - model, - messages: [ - { - role: 'user', - content: - 'reply just pong, set success to true, and provide a random number between 1 and 100.' - } - ], - max_completion_tokens: maxTokens || 2000, - response_format: { - type: 'json_schema', - json_schema: { - name: 'model_test', - strict: true, - schema: { - type: 'object', - properties: { - reply: { type: 'string', description: 'The text reply' }, - success: { type: 'boolean', description: 'Always true' }, - data: { - type: 'object', - properties: { - number: { type: 'integer' } - }, - required: ['number'], - additionalProperties: false - } - }, - required: ['reply', 'success', 'data'], - additionalProperties: false - } - } - } - }); - - const content = completion.choices[0]?.message?.content; - if (!content) { - throw new Error('No content returned from the model.'); - } - - const parsed = JSON.parse(content); - if ( - typeof parsed.reply !== 'string' || - typeof parsed.success !== 'boolean' || - typeof parsed.data !== 'object' || - typeof parsed.data.number !== 'number' - ) { - throw new Error('Model did not follow the JSON schema correctly.'); - } - - showMessage({ msg: 'The model is valid and supports structured outputs!' }); - } catch (err: any) { - showMessage({ msg: err, isError: true }); - } -} - -const checkModelBtn: HTMLElement = document.querySelector('#check-model')!; -checkModelBtn.addEventListener('click', checkModel); diff --git a/src/popup/hooks/useConfig.ts b/src/popup/hooks/useConfig.ts new file mode 100644 index 0000000..788faa5 --- /dev/null +++ b/src/popup/hooks/useConfig.ts @@ -0,0 +1,48 @@ +import { useState, useEffect } from 'preact/hooks'; + +export interface MoodleGPTConfig { + apiKey?: string; + code?: string; + model?: string; + baseURL?: string; + maxTokens?: number; + projectId?: string; + timeoutValue?: number; + logs?: boolean; + title?: boolean; + cursor?: boolean; + typing?: boolean; + mouseover?: boolean; + infinite?: boolean; + timeout?: boolean; + history?: boolean; + includeImages?: boolean; + mode?: 'autocomplete' | 'clipboard'; +} + +export function useConfig() { + const [config, setConfig] = useState({ + mode: 'autocomplete', + title: true, + cursor: true, + timeout: true + }); + const [loading, setLoading] = useState(true); + + useEffect(() => { + chrome.storage.sync.get(['moodleGPT']).then(storage => { + if (storage.moodleGPT) { + setConfig(prev => ({ ...prev, ...storage.moodleGPT })); + } + setLoading(false); + }); + }, []); + + const saveConfig = async (newConfig: MoodleGPTConfig) => { + const updated = { ...config, ...newConfig }; + setConfig(updated); + await chrome.storage.sync.set({ moodleGPT: updated }); + }; + + return { config, loading, saveConfig, setConfig }; +} diff --git a/src/popup/hooks/useModel.ts b/src/popup/hooks/useModel.ts new file mode 100644 index 0000000..b48431b --- /dev/null +++ b/src/popup/hooks/useModel.ts @@ -0,0 +1,113 @@ +import { useState } from 'preact/hooks'; +import OpenAI from 'openai'; + +export function useModel(apiKey?: string, baseURL?: string, projectId?: string) { + const [models, setModels] = useState([]); + const [error, setError] = useState(null); + + const isCurrentVersionSupportingImages = (version?: string) => { + if (!version) return false; + const versionNumber = version.match(/gpt-(\d+)/); + if (!versionNumber?.[1]) { + return false; + } + return Number(versionNumber[1]) >= 4; + }; + + const fetchModels = async () => { + if (!apiKey) return; + try { + const client = new OpenAI({ + apiKey, + baseURL: baseURL || undefined, + project: projectId || undefined, + dangerouslyAllowBrowser: true + }); + + const rep = await client.models.list(); + + const filteredModels = rep.data.filter( + model => + model.id.startsWith('gpt') || + model.id.search(/^o\d+/gi) !== -1 || + model.id.startsWith('chatgpt') + ); + filteredModels.sort((a, b) => b.id.localeCompare(a.id)); + + setModels(filteredModels.map(m => m.id)); + setError(null); + } catch (err: any) { + console.error(err); + setError(err.message || String(err)); + } + }; + + const validateModel = async (model: string, maxTokens?: number) => { + if (!apiKey || !model) return { success: false, error: 'API Key and Model are required' }; + + try { + const client = new OpenAI({ + apiKey, + baseURL: baseURL || undefined, + project: projectId || undefined, + dangerouslyAllowBrowser: true + }); + const completion = await client.chat.completions.create({ + model, + messages: [ + { + role: 'user', + content: + 'reply just pong, set success to true, and provide a random number between 1 and 100.' + } + ], + max_completion_tokens: maxTokens || 2000, + response_format: { + type: 'json_schema', + json_schema: { + name: 'model_test', + strict: true, + schema: { + type: 'object', + properties: { + reply: { type: 'string', description: 'The text reply' }, + success: { type: 'boolean', description: 'Always true' }, + data: { + type: 'object', + properties: { + number: { type: 'integer' } + }, + required: ['number'], + additionalProperties: false + } + }, + required: ['reply', 'success', 'data'], + additionalProperties: false + } + } + } + }); + + const content = completion.choices[0]?.message?.content; + if (!content) { + throw new Error('No content returned from the model.'); + } + + const parsed = JSON.parse(content); + if ( + typeof parsed.reply !== 'string' || + typeof parsed.success !== 'boolean' || + typeof parsed.data !== 'object' || + typeof parsed.data.number !== 'number' + ) { + throw new Error('Model did not follow the JSON schema correctly.'); + } + + return { success: true, message: 'The model is valid and supports structured outputs!' }; + } catch (err: any) { + return { success: false, error: err.message || String(err) }; + } + }; + + return { models, fetchModels, validateModel, error, isCurrentVersionSupportingImages }; +} diff --git a/src/popup/index.ts b/src/popup/index.ts deleted file mode 100644 index 3299b4a..0000000 --- a/src/popup/index.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { globalData, inputsCheckbox, modes } from './data'; -import { checkCanIncludeImages } from './gpt-version'; -import { handleModeChange } from './mode-handler'; -import './version'; -import './settings'; - -import { showMessage } from './utils'; - -const saveBtn = document.querySelector('.save')!; - -// inputs id -const inputsText = ['apiKey', 'code', 'model', 'baseURL', 'maxTokens', 'projectId', 'timeoutValue']; - -// Save the configuration -saveBtn.addEventListener('click', function () { - const [apiKey, code, model, baseURL, maxTokens, projectId, timeoutValue] = inputsText.map( - selector => (document.querySelector('#' + selector) as HTMLInputElement).value.trim() - ); - const [logs, title, cursor, typing, mouseover, infinite, timeout, history, includeImages] = - inputsCheckbox.map(selector => { - const element: HTMLInputElement = document.querySelector('#' + selector)!; - return element.checked && element.parentElement!.style.display !== 'none'; - }); - - if (!apiKey || !model) { - showMessage({ msg: 'Please complete all the form', isError: true }); - return; - } - - if (code.length > 0 && code.length < 2) { - showMessage({ - msg: 'The code should at least contain 2 characters', - isError: true - }); - return; - } - - chrome.storage.sync.set({ - moodleGPT: { - apiKey, - code, - model, - baseURL, - maxTokens: maxTokens ? parseInt(maxTokens) : undefined, - projectId, - timeoutValue: timeoutValue ? parseInt(timeoutValue) : undefined, - logs, - title, - cursor, - typing, - mouseover, - infinite, - timeout, - history, - includeImages, - mode: globalData.actualMode - } - }); - - showMessage({ msg: 'Configuration saved' }); -}); - -// we load back the configuration -chrome.storage.sync.get(['moodleGPT']).then(function (storage) { - const config = storage.moodleGPT; - - if (config) { - if (config.mode) { - globalData.actualMode = config.mode; - for (const mode of modes) { - if (mode.value === config.mode) { - mode.classList.remove('not-selected'); - } else { - mode.classList.add('not-selected'); - } - } - } - - inputsText.forEach(key => - config[key] - ? ((document.querySelector('#' + key) as HTMLInputElement).value = config[key]) - : null - ); - inputsCheckbox.forEach( - key => ((document.querySelector('#' + key) as HTMLInputElement).checked = config[key] || '') - ); - } - - handleModeChange(); - checkCanIncludeImages(); -}); diff --git a/src/popup/index.tsx b/src/popup/index.tsx new file mode 100644 index 0000000..6ba8e1d --- /dev/null +++ b/src/popup/index.tsx @@ -0,0 +1,7 @@ +import { render } from 'preact'; +import { App } from './components/App'; + +const root = document.getElementById('root'); +if (root) { + render(, root); +} diff --git a/src/popup/mode-handler.ts b/src/popup/mode-handler.ts deleted file mode 100644 index 25c0805..0000000 --- a/src/popup/mode-handler.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { globalData, inputsCheckbox, modes } from './data'; - -// input to don't take in consideration -const toExcludes = ['includeImages']; - -// inputs id that need to be disabled for a specific mode -const disabledForThisMode: Record = { - autocomplete: [], - clipboard: ['typing', 'mouseover'] -}; - -/** - * Handle when a mode change to show specific input or to hide them - */ -export function handleModeChange() { - const needDisable = disabledForThisMode[globalData.actualMode]; - const dontNeedDisable = inputsCheckbox.filter( - input => !needDisable.includes(input) && !toExcludes.includes(input) - ); - for (const id of needDisable) { - document.querySelector('#' + id)!.parentElement!.style.display = 'none'; - } - for (const id of dontNeedDisable) { - document.querySelector('#' + id)!.parentElement!.style.display = ''; - } -} - -// Mode hanlder -for (const button of modes) { - button.addEventListener('click', function () { - const value = button.value; - globalData.actualMode = value; - for (const mode of modes) { - if (mode.value !== value) { - mode.classList.add('not-selected'); - } else { - mode.classList.remove('not-selected'); - } - } - handleModeChange(); - }); -} diff --git a/src/popup/settings.ts b/src/popup/settings.ts deleted file mode 100644 index 2bba210..0000000 --- a/src/popup/settings.ts +++ /dev/null @@ -1,21 +0,0 @@ -const settings: HTMLElement = document.querySelector('#settings')!; -const advencedSettings: HTMLElement = document.querySelector('#advanced-settings')!; -const switchSettings: HTMLLinkElement = document.querySelector('#switch-settings')!; - -export function switchSettingsMode() { - const isAdvancedSettings = advencedSettings.style.display === 'flex'; - - if (isAdvancedSettings) { - settings.style.display = 'flex'; - advencedSettings.style.display = 'none'; - switchSettings.textContent = 'Advanced settings'; - } else { - settings.style.display = 'none'; - advencedSettings.style.display = 'flex'; - switchSettings.textContent = 'Go back to settings'; - } -} -switchSettings.addEventListener('click', function (event) { - event.preventDefault(); - switchSettingsMode(); -}); diff --git a/src/popup/style.css b/src/popup/style.css new file mode 100644 index 0000000..6fa7cb6 --- /dev/null +++ b/src/popup/style.css @@ -0,0 +1,61 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + body { + width: 380px; + min-height: 500px; + } +} + +@layer components { + .toggle-switch { + position: relative; + display: inline-block; + width: 36px; + height: 20px; + } + + .toggle-switch input { + opacity: 0; + width: 0; + height: 0; + } + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: theme('colors.input.bg'); + border: 1px solid theme('colors.input.border'); + transition: 0.4s; + border-radius: 20px; + } + + .slider:before { + position: absolute; + content: ''; + height: 14px; + width: 14px; + left: 2px; + bottom: 2px; + background-color: theme('colors.text.secondary'); + transition: 0.4s; + border-radius: 50%; + } + + input:checked + .slider { + background-color: theme('colors.primary.DEFAULT'); + border-color: theme('colors.primary.DEFAULT'); + } + + input:checked + .slider:before { + transform: translateX(16px); + background-color: white; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + } +} diff --git a/src/popup/utils.ts b/src/popup/utils.ts deleted file mode 100644 index 7c9f463..0000000 --- a/src/popup/utils.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Show message into the popup - */ -export function showMessage({ - msg, - isError, - isInfinite -}: { - msg: string; - isError?: boolean; - isInfinite?: boolean; -}) { - const message: HTMLElement = document.querySelector('#message')!; - message.style.color = isError ? 'red' : 'limegreen'; - message.textContent = msg; - message.style.display = 'block'; - if (!isInfinite) setTimeout(() => (message.style.display = 'none'), 5000); -} - -/** - * Check if the current model support images integrations - * @param {string} version - * @returns - */ -export function isCurrentVersionSupportingImages(version: string) { - const versionNumber = version.match(/gpt-(\d+)/); - if (!versionNumber?.[1]) { - return false; - } - return Number(versionNumber[1]) >= 4; -} diff --git a/src/popup/version.ts b/src/popup/version.ts deleted file mode 100644 index 2ff3e17..0000000 --- a/src/popup/version.ts +++ /dev/null @@ -1,61 +0,0 @@ -const CURRENT_VERSION = '2.0.0'; -const versionDisplay = document.querySelector('#version')!; - -/** - * Get the last version from the github - * @returns - */ -export async function getLastVersion(): Promise { - const req = await fetch( - 'https://raw.githubusercontent.com/yoannchb-pro/MoodleGPT/main/package.json' - ); - const rep = await req.json(); - return rep.version; -} - -/** - * Display the version or an update message - * @param {string} version - * @param {boolean} isCurrent - * @returns - */ -export function setVersion(version: string, isCurrent = true) { - if (isCurrent) { - versionDisplay.textContent = 'v' + version; - return; - } - - const link = document.createElement('a'); - link.href = 'https://github.com/yoannchb-pro/MoodleGPT'; - link.rel = 'noopener noreferrer'; - link.target = '_blank'; - link.textContent = 'v' + version; - versionDisplay.appendChild(link); - versionDisplay.appendChild(document.createTextNode(' is now available !')); -} - -/** - * Check if the extension neeed an update or not - */ -export async function notifyUpdate() { - const lastVersion = await getLastVersion().catch(err => { - console.error(err); - return CURRENT_VERSION; - }); - - const lastVertionSplitted = lastVersion.split('.'); - const currentVersionSplitted = CURRENT_VERSION.split('.'); - const minVersionLength = Math.min(lastVertionSplitted.length, currentVersionSplitted.length); - - for (let i = 0; i < minVersionLength; ++i) { - if (parseInt(lastVertionSplitted[i]) > parseInt(currentVersionSplitted[i])) { - return setVersion(lastVersion, false); - } else if (parseInt(currentVersionSplitted[i]) > parseInt(lastVertionSplitted[i])) { - return setVersion(CURRENT_VERSION); - } - } - - setVersion(CURRENT_VERSION); -} - -notifyUpdate(); diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..ea2a041 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,55 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ['./src/popup/**/*.{js,jsx,ts,tsx}', './extension/popup/index.html'], + theme: { + extend: { + colors: { + primary: { + DEFAULT: '#6366f1', + hover: '#4f46e5' + }, + gradient: { + start: '#0f172a', + end: '#1e1b4b' + }, + panel: { + bg: 'rgba(255, 255, 255, 0.05)', + border: 'rgba(255, 255, 255, 0.1)' + }, + text: { + primary: '#f8fafc', + secondary: '#94a3b8' + }, + input: { + bg: 'rgba(0, 0, 0, 0.2)', + border: 'rgba(255, 255, 255, 0.15)', + focus: '#818cf8' + }, + success: '#10b981', + error: '#ef4444' + }, + fontFamily: { + sans: [ + 'Inter', + '-apple-system', + 'BlinkMacSystemFont', + 'Segoe UI', + 'Roboto', + 'Helvetica', + 'Arial', + 'sans-serif' + ] + }, + animation: { + float: 'float 3s ease-in-out infinite' + }, + keyframes: { + float: { + '0%, 100%': { transform: 'translateY(0)' }, + '50%': { transform: 'translateY(-4px)' } + } + } + } + }, + plugins: [] +}; diff --git a/tsconfig.json b/tsconfig.json index f9a22c7..1e742c9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,9 @@ "outDir": "extension", "types": ["node", "chrome"], "typeRoots": ["node_modules/@types"], - "strictBindCallApply": true + "strictBindCallApply": true, + "jsx": "react-jsx", + "jsxImportSource": "preact" }, "include": ["src/**/*"] }
    -
    - - icon - -
    -

    MoodleGPT

    +
    + SparkAssist Logo +
    +

    SparkAssist

    - -
    -
    - - + +
    +
    + +
    -
    - - - - +
    + +
    + + + +
    -